Command Message

Date: 31-Mar-1999
Last Modified: 22-May-2000
(c) Copyright 1997-2000 by H.Fujii

[前へ][次へ]

メニュー項目をユーザが選択した場合、そのメニューを持っている Window へ メッセージが送られ、その Window Procedure が呼び出されます。 つまり、いまの場合は WndProc Exampleで示した関数が呼び出されます。 この時、uMsg には WM_COMMAND という値が設定されており、 wParam に、選択されたメニュー項目に対応する ID と Notification Code (メニューの場合は 0)が設定されています。 例えば、前回示したメニューの例 で、ユーザが "File"-"Exit" を選ぶと、wParamLOWORD には 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" を選ぶと、プログラムが終了するように なりました。


[前へ][次へ]