• ベストアンサー

HANDLEとHWNDの違いについて

HANDLE と HWND の違いについて自分なりにノートにまとめようとしています。HANDLEとは、ウインドウを識別するためのものだと思っていました。 となると、HWNDも同じ説明になり、やはり理解が間違っていたのかと思います。 ご存知の方がいらしゃいましたら教えたください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mssine
  • ベストアンサー率24% (38/156)
回答No.1

HANDLEはオブジェクトを識別するもの。 HWNDはオブジェクトがウィンドウの場合のHANDLEの別名 プログラム的には全部unsigned longの値 HHOOK,HINSTANCE,HBRUSH,HDCとかも全部同じ。 HANDLEをHWNDに書き換えたところで、コンパイルエラーも実行時エラーも起きません。逆もまた然り。

nirusu
質問者

お礼

大変わかりやすく助かりました。 >>HWNDはオブジェクトがウィンドウの場合のHANDLEの別名 の箇所については、まったく知りませんでした。 新しい知識をいただきましてありがとうございました。

その他の回答 (3)

  • mssine
  • ベストアンサー率24% (38/156)
回答No.4

#1です。 >一体いつの話でしょう? VC5の時なので、1997年? vc5のMFCなら#3さんのおっしゃるようにエラーになりましたね。 (Win32 APPLならエラーになりません) ご指摘有難うございました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>HHOOK,HINSTANCE,HBRUSH,HDCとかも全部同じ。 > >HANDLEをHWNDに書き換えたところで、コンパイルエラーも実行時エラーも起きません。逆もまた然り。 一体いつの話でしょう? 最近のMSのコンパイラはデフォルトでSTRICTが宣言されおり、SDKでもデフォルトで定義されているので型が違えば全部エラーです。

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.2

HANDLEはハンドル HWNDはウインドウハンドル です。 つまりハンドルの1つがHWNDです。 VC++では(依存関係にもよりますが)windef.hやwinnt.hなどで以下のように定義されています。つまりHWNDはHANDLEをtypedefしたもので、HANDLEはPVOID、PVOIDはvoid*という感じで、HWNDもHANDLEも元をたどればvoid*に行き着きます。 typedef void *PVOID; typedef PVOID HANDLE; #define DECLARE_HANDLE(name) typedef HANDLE name DECLARE_HANDLE (HWND);

関連するQ&A