メニュー項目をユーザが選択した場合、そのメニューを持っている Window へ メッセージが送られ、その Window Procedure が呼び出されます。 つまり、いまの場合は WndProc Exampleで示した関数が呼び出されます。 この時、uMsg には WM_COMMAND という値が設定されており、 wParam に、選択されたメニュー項目に対応する ID と Notification Code (メニューの場合は 0)が設定されています。 例えば、前回示したメニューの例 で、ユーザが "File"-"Exit" を選ぶと、wParam の LOWORD には ID_FILE_EXIT が設定されて、WndProc() が呼び出されます。
具体的に前の WndProc() の例 を、 WM_PAINT の処理も加えて書き換えて みましょう。Resource File にある ID と共通の ID が必要なので、 resource.h を include してあります。
#define STRICT #include <windows.h> #include "resource.h" void OnPaint( HDC hdc ); LRESULT CALLBACK WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { WORD wNotifyCode; WORD wID; HDC hdc; PAINTSTRUCT ps; switch( uMsg ) { case WM_COMMAND: wNotifyCode = HIWORD( wParam ); wID = LOWORD( wParam ); switch( wID ) { case ID_FILE_EXIT: DestroyWindow( hwnd ); break; default: MessageBox( NULL, "Sorry. Not implemented yet.", "My Program", MB_OK ); break; } break; case WM_DESTROY: PostQuitMessage( 0 ); break; case WM_PAINT: hdc = BeginPaint( hwnd, &ps ); OnPaint( hdc ); EndPaint( hwnd, &ps ); break; default: return( DefWindowProc( hwnd, uMsg, wParam, lParam ) ); } return 0; }これで、メニュー "File" - "Exit" を選ぶと、プログラムが終了するように なりました。