2012-04-17 10 views
1

私はMFCを初めて使うので、私に同行してください。デュアルスクリーンモニタにフルスクリーンで表示されるダイアログがあります。このダイアログは、モーダルでない別のダイアログ内でインスタンス化されます(ボタンがクリックされたとき)。ような何か:MyChildNonModalDlgOnInitDialog()フォーカスを失うとMFCダイアログがフリーズする

void MyCParentDlg::OnBnClickedButton1() 
{ 
     dlg2 = new MyChildNonModalDlg(); 
     dlg2->ShowWindow(SW_SHOW); 
} 

は、ShowWindow(SW_MAXIMIZE)は、それなしのボーダーとの対話フルスクリーンにするために呼び出されます。実行されていると私は(他の画面に言う)ダイアログ外で私のマウスでクリックするとダイアログが、継続的に更新されている

void MyChildNonModalDlg::onBnClickedBut2() { 
    // Display images on the dialog one by one for a very long time 
} 

onBnClickedBut2ながらダイアログの意味:今、MyChildNonModalDlg内部のボタンのコールバックイベントがありますがフォーカスを失う、それがフリーズする!

OnBnClickedBut2()内のプロセスはスレッド内で実行する必要がありますが、スレッドについてはほとんど知りませんが、誰かが正しい方向を指し示すか、提供することができるマルチスレッドで修正できる可能性があります。これを行うことができるコード例?

+0

子ダイアログが**フルスクリーンではない**と同じ問題が発生するので、この問題はフルスクリーンモードではないことに注意してください。 –

+1

Windowsが「応答しない」ゴーストウィンドウを表示するため、フリーズします。これはUIコードでは無効です。別のスレッドで長いループを実行する必要があります。 –

+1

OK私はこれを考え出したと思います。ここでは、MFCでのスレッドの優れた紹介、サンプルコードのダウンロード、実際にそれを勉強することで、マルチスレッドとこれも非常に小さなスレッドバックグラウンドで行う方法を1時間以内に学ぶことができました。リンク:http://www.codeproject.com/Articles/5542/Simple-Multithreaded-Application-in-pure-C-Win32-a –

答えて

0

AfxBeginThreadを使用して、onBnClickedBut2の内部に新しいスレッドを作成します。 UIイベントハンドラをブロックすることは想定されていません。あなたは今それを持っていることを願っています。

関連する問題