MessageBox()
には、ウィンドウメッセージメッセージを処理するためにウィンドウメッセージポンプサイクルが組み込まれています。
非常に低いレベルでアプリケーション内のどこかに、OpenGLコンテンツをホストするウィンドウのメッセージを処理するためのウィンドウメッセージループが必要です。これは、ウィンドウを作成したスレッド内から実行する必要があります。 MessageBox()
が別のスレッドから呼び出されると、他の場所で見られる悪影響が競合の副作用によって簡単に引き起こされる可能性があります。
ここでは、MSDNでのウィンドウメッセージの操作の概要を示します。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
ウィンドウを更新するに扱われている方法に応じて、あなたの場合:非常に単純に(wikipediaからのサンプルコードを経由して)入れ
Using Messages and Message Queues @ MSDN
は、次のように似て立っループを必要としますペイントメッセージ(WM_PAINT
)を使用している場合は、できるだけ早くこれらをディスパッチする必要があります。また、デバイスDCに直接描画する場合は、それらを完全に抑制する必要があります。メッセージループが適切にセットアップされると、追加のバグが見つかる可能性があるため、これについて言及しています。私の答えにpezcodeの音符当たり
WM_PAINT message @ MSDN
、それはあなたが 'メッセージボックスを()'挿入する必要がある場所に設定されたブレークポイントからスタックトレースを投稿することができれば助けて、両方のデバッグからのビルドとリリースビルドでしょう。これは、たくさんのコードを投稿することなく、わかりやすい絵を描くのに役立ちます。 – meklarian
何か助けを求めたい場合は、より詳細な情報を提供する必要があります。 – Luca