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


1章.6節.メッセージループ

  あのアプリケーションのプログラムでは,どのような関数があったかを思い出してください.

  @ATOM MyRegisterClass( HINSTANCE hInstance )
  ABOOL InitInstance( HINSTANCE, int )
  BLRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM )
  CLRESULT CALLBACK About( HWND, UINT, WPARAM, LPARAM )
  Dint APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow )

 といった感じの5つの関数がありました.

 ここで,Bの関数がプロシージャーであり,Dの関数の中にメッセージループがあります.

 ちょっと見てみましょう.

 

 Dの関数の中を見てみると,こんなコードがありました.

 

 // メイン メッセージ ループ:
 while( GetMessage(&msg, NULL, 0, 0) ) 
 {
    if( !TranslateAccelerator (msg.hwnd, hAccelTable, &msg) ) 
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
 }

 

 ちゃんとコメントでメッセージループって書いてくれてましたね...

 

 ここのコードを解釈すると,

 

 GetMessage関数で,Windowsから送られたメッセージを取得(Get)してきて,

 (TranslateAccelerator,TranslateMessage関数は,今あんまり気にする必要ないです.)

 DispatchMessage関数で,メッセージをプロシージャ−に送出(Dispatch)します!

 

 それをwhile文でひたすら繰り返しています.

 ちゃんとメッセージループとしての役割を果たしていることがコードからわかりました.

 

 次回はプロシージャーについて述べていきたいと思います!!

 

 

 

 ※補足:TranslateAccelerator,TranslateMessage関数が気になる方へ

 

  !TranslateAccelerator(msg.hwnd, hAccelTable, &msg):
    アクセラレーター(メニューコマンドつまりAlt+Fでメニューバーの[ファイル]が開くなど)に対するメッセージであれば,それに対応する処理を実行して,プロシージャ−にはメッセージを送らないという仕組みになっている.

  TranslateMessage( &msg ):

    仮想キーメッセージを文字メッセージへ変換します.

    詳しいことはわかりませんが,キーボードが押されたというメッセージから文字メッセージを生成してくれる関数みたいです.

  

  

            

 

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

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

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

 

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