メッセージクラッカーで使用する関数の引数について
HANDLE_MSG(hwnd,WM_CREATE,OnCreate);
HANDLE_MSG(hwnd,WM_COMMAND,OnCommand);
・・・
で使用する
OnCreate()
OnCommand()
のどの関数の引数の種類、順序が分かりません
よろしくお願いします
環境 Windows98
VC6.0
API で作成しています
windowsx.h の例えば、HANDLE_WM_CREATEの部分を見ると、
/* BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
#define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) \
というように、コメントに関数プロトタイプが書いてあります。
HANDLE_MSG( ウィンドウハンドル, ウィンドウメッセージ番号, 自分で定義した関数の
名前 );
#「Advanced Windows」ですか?
間違えました。マクロの説明じゃなくハンドラの説明でした。
dairygoodsさんのコメントが正しいです。
ご指摘ありがとうございます
Windowsx.hを見てみましたが
1. #define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) \
((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)
2. #define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \
((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)),
0L)
1. OnCreate(HWND,LPCREATESTRUCT)
・\ の意味
・?後のFALSE TRUE の意味
が分かりません
2. OnCommand(HWND,Control ID,lParam,Notification code)
ということでしょうか?
「\」は、マクロ定義がここで終わりじゃなくて次の行にも続きます、という意味です。
「?」は、実は「a ? b : c」という形式で、aが真ならばbを、aが偽ならばcを実行(ま
たは解釈)するという「三項演算子」の一部です。
WM_CREATE return 0 or -1 --->BOOL OnCreate()
WM_COMMAND return 0 --->void OnCommand()
ということで、メッセージ WM_...のreturn値から、
クラッカー On..でもreturn値のあるなしが決まるということでしょうか
ほぼ、納得しました
ご指摘いただいた方、ありがとうございました