皆さん、こんにちは。私たちが使用している Win32 API のデータ型とマクロについて、いくつか混乱があります。
まず-: WM_NOTIFYメッセージ について。lparamには、 NMHDR構造体へのポインターが含まれています。したがって、ポインターの場合、次のように NMHDR 構造にアクセスするのはなぜ違法なのですか?
(*lparam)->idFrom
つまり、ポインターの場合は、間接演算子を使用して構造体にアクセスできます。LPARAM 自体は、LONG_PTR から型定義されています。なぜ私はこのようなコードを書かなければならないのですか?
((LPNMHDR)lparam)->idFrom
LPNMHDRとは何ですか? LPNMHDR は、次の方法で型定義されます。
typedef NMHDR FAR * LPNMHDR;
FAR*は、次のように定義されます。
#define FAR _far
_far とは何ですか? LPNMHDR キャストを使用して LPARAM から NMHDR 構造体にアクセスする必要があるのはなぜですか?
次に-: MAKEINTRESOURCEマクロは 何をしますか? 関数にリソースを指定するときに、多くの作成者がプレーンな文字列を使用しているのを見てきました。例えば-:
CreateDialog(hInst,"Dialog Box",
hwnd,(DLGPROC)DialogFunc);
しかし、最新のコンパイラでは次のように使用します。
CreateDialog(hInst,MAKEINTRESOURCE(DIALOG_BOX),
hwnd,(DLGPROC)DialogFunc);
リソース ファイルで数値の代わりに文字列識別子を使用する場合、このマクロを省略できるので、このマクロは数値を文字列に変換します。たとえば、23 を "23" に変換しますか?? もしそうなら、私は使用できるからです -:
CreateDialog(hInst,"23",
hwnd,(DLGPROC)DialogFunc);
私のダイアログ ボックス リソースが 23 で定義されている場合。しかし、これは機能しません。
このマクロが識別子を処理した後の結果を知りたいですか? それはどのように機能しますか?sprintf 関数を使用して値を文字列にコピーするときに問題に直面しているため、MAKEINTRESOURCE の値をメッセージ ボックスに出力するにはどうすればよいでしょうか。しかし、次のように定義されているため、MAKEINTRESOURCE が LPSTR を出力することはわかっています。
#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
このマクロがどのように機能するかについてのドキュメントはまだ見つかりません。msdn は、MAKEINTRESOURCE は '整数値をリソース管理関数と互換性のあるリソース タイプに変換するマクロである ' と述べています。ありがとうございました。