OpenGLを使ってみる。その4.2 -描画スレッドの停止条件を追加(WM_ENABLE)-
前回OpenGLを使ってみる。その4.1 -描画スレッドの停止と再開について- - while( c++ );のサンプルでバグがあったので修正します。
1.メニュー→ヘルプ→バージョン情報でモーダルダイアログを表示すると、ウィンドウが無効状態でも描画スレッドが実行されてしまう
解決策
- WM_ENABLEでスレッドの停止、再開
ウィンドウのサイズ変更、移動時 | WM_ENTERSIZEMOVE、WM_EXITSIZEMOVE |
メニュー選択時 | WM_ENTERMENULOOP、WM_EXITMENULOOP |
タイトルバーダブルクリック時 | WM_NCLBUTTONDBLCLK、wParam == HTCAPTION |
システムメニュー(最小化、最大化、タスクバーのアイコンクリック) | WM_SYSCOMMAND、( wParam & 0xFFF0 ) == SC_MAXIMIZE、SC_MINIMIZE、SC_RESTORE |
ウィンドウの非アクティブ時 | WM_ACTIVATEAPP |
ウィンドウ上にモーダルダイアログを出した時 | WM_ENABLE |
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { /*...*/ //ウィンドウ上にモーダルダイアログを出した場合など、 //ウィンドウが無効化した時にスレッド停止、有効化で再開 case WM_ENABLE: if( wParam ) { t.start(); } else { t.stop(); } break; /*...*/ }