- ベストアンサー
HANDLEとHWNDの違いについて
HANDLE と HWND の違いについて自分なりにノートにまとめようとしています。HANDLEとは、ウインドウを識別するためのものだと思っていました。 となると、HWNDも同じ説明になり、やはり理解が間違っていたのかと思います。 ご存知の方がいらしゃいましたら教えたください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
HANDLEはオブジェクトを識別するもの。 HWNDはオブジェクトがウィンドウの場合のHANDLEの別名 プログラム的には全部unsigned longの値 HHOOK,HINSTANCE,HBRUSH,HDCとかも全部同じ。 HANDLEをHWNDに書き換えたところで、コンパイルエラーも実行時エラーも起きません。逆もまた然り。
その他の回答 (3)
- mssine
- ベストアンサー率24% (38/156)
#1です。 >一体いつの話でしょう? VC5の時なので、1997年? vc5のMFCなら#3さんのおっしゃるようにエラーになりましたね。 (Win32 APPLならエラーになりません) ご指摘有難うございました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>HHOOK,HINSTANCE,HBRUSH,HDCとかも全部同じ。 > >HANDLEをHWNDに書き換えたところで、コンパイルエラーも実行時エラーも起きません。逆もまた然り。 一体いつの話でしょう? 最近のMSのコンパイラはデフォルトでSTRICTが宣言されおり、SDKでもデフォルトで定義されているので型が違えば全部エラーです。
- nitscape
- ベストアンサー率30% (275/909)
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);
お礼
大変わかりやすく助かりました。 >>HWNDはオブジェクトがウィンドウの場合のHANDLEの別名 の箇所については、まったく知りませんでした。 新しい知識をいただきましてありがとうございました。