2012-05-12 3 views
2

私はwin32のc/cppプロジェクトに取り組んでいます。私はちょうど始めて、標準のwin32プログラムがどのように動作するかに関するいくつかの基本的な質問をしました。チュートリアルの後、私はwinmainに新しいウィンドウを作成させ、ウィンドウに対してOpenGLを有効にしてからメインループに入り、メッセージがあればプログラムで処理し、そうでなければ描画OpenGLアニメーションに移動します。その後、私は単にOpenGLをシャットダウンしてウィンドウを破棄します。私はここで何が起こっているのかについて、あまりにも混乱しないんだけど、これは私が迷子場所です:win32/openglとコールバック関数..どのように構造化されていますか?

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


switch (message) 
{ 

case WM_CREATE: 
    return 0; 

case WM_CLOSE: 
    PostQuitMessage(0); 
    return 0; 

case WM_DESTROY: 
    return 0; 

case WM_KEYDOWN: 
    switch (wParam) 
    { 

    case VK_ESCAPE: 
     PostQuitMessage(0); 
     return 0; 

    } 
    return 0; 

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

} 

私は

wc.lpfnWndProc = WndProc; 
を経由して私のウィンドウクラスにこの関数を登録WinMain関数に表示さんが

このプロセスはどのくらい正確に機能しますか?誰かが私にパイプラインを説明することができますか?winmainメソッドが実行されると、OpenGLアニメーションを描画しますが、キーが押されるとすぐにメッセージ処理が行われます。私のwinmainメソッドはWndProcメソッドとどのように通信しますか?マシンの視点から実際に何が起こっていますか?

+1

キーがメッセージループ内にあります。その結果、ウィンドウプロシージャが呼び出されます。あなたがPetzoldの古典的な本を手に入れて、基礎の上に乗る必要があるように私に聞こえます。 –

+0

@DavidHeffernan http://www.charlespetzold.com/pw5/ これはあなたが話している本ですか? – lululoo

+1

はい、それは本です。 –

答えて

0

WinMainには、TranslateMessage/DispatchMessageの呼び出しが必要です。 TranslateMessageはキーストロークが正しく配信されるようにし、DispatchMessageは入力フォーカスを持つウィンドウにメッセージを配信するためにウィンドウ階層を横断し、ポインタがデフォルトのウィンドウメッセージハンドラ(Window Procedure)としてメッセージをパラメータとして登録された関数を呼び出す。

関連する問題