<Previous>   <Next>   <SDK Top>   <Top>


1章.7節.プロシージャー

 次にプロシージャーについて見ていきましょう.

 前節の@〜Dの関数のうち,プロシージャーに対応するものは,,,
 BLRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM )
 
でしたね.

 

 ここで,Bの関数を覗いてみましょう.

 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{

int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

switch( message ) 
{


case WM_COMMAND:

wmId = LOWORD(wParam); 


wmEvent = HIWORD(wParam); 

// メニュー選択の解析:
switch( wmId ) 
{


case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow( hWnd );
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam );

}
break;

case WM_PAINT:

hdc = BeginPaint (hWnd, &ps);
// TODO: この位置に描画用のコードを追加してください...
RECT rt;
GetClientRect( hWnd, &rt );
DrawText( hdc, szHello, strlen(szHello), &rt, DT_CENTER );
EndPaint( hWnd, &ps );
break;

case WM_DESTROY:

PostQuitMessage( 0 );
break;

default:

        return DefWindowProc( hWnd, message, wParam, lParam );

}
return 0;

}

 

なんか長いコードがずらりと表示されました.しかし,焦ることはありません.

プロシージャーの意味を思い出してください.

メッセージループから送出されたメッセージを受け取り,そのメッセージに対応した処理をするんでしたよね!

じゃあ順番に見ていきましょう.

上のコードで色づけしたところが要点であります.

 

 

はじめに,

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
ですが,

これは関数の戻り値と関数名と引数が書かれているんですよね.C言語を学んでいるならわかると思います.

ここで,引数のUINT messageってのが,メッセージループから受け取ったメッセージなんです!!

あとは,そのメッセージをどう処理するかだけです.

 

 

つぎに,

switch( message )

ですが,スイッチ文はわかりますよね?この場合,messageによって,処理を切り替えているわけです.

すなわち,ここでメッセージによって処理を変えることをしています.

 

 

最後に,

case WM_COMMAND:

case WM_PAINT:

case WM_DESTROY:

default:

ですが,これらはさきほどのスイッチ文からmessageが WM_COMMAND,WM_PAINT,WM_DESTROY なら各々の処理をしなさいっていう文ですよね.

 

しかし,,WM_COMMANDとかWM_PAINTって一体なんなんだ??と思うでしょう.

その説明は次節にしましょう.

  

            

 

------------------------------------------------------------------------------------------------

注)当ページの一部または全部を転載、複写、複製することを禁じます。
Update 04/01/29 By 松本義弘

------------------------------------------------------------------------------------------------

 デル4_120x60富士通ショッピングサイト WEB MART   NEC得選街   sotecロゴ88x31b   バナー 10000035