2012-03-04 31 views
1

このアプリケーションでは、表示する必要があるいくつかのデータを開いて処理するMFCダイアログがあります。したがって、OnPaint()イベントの内部で遅延処理が開始されます。処理 は時間がかかります(約20-30秒)、アルゴリズムのみです(UI APIは呼び出されません)。 何が起こるかは、処理が終了した後にウインドウが「消える」ことがあります。私たちはそれが親ウィンドウ(メインフレーム)の後ろに持ち込まれていることを知りました。時間がかかるOnPaint()の後にMFCダイアログが消える

処理が終了した直後、または非UIスレッドで処理を実行して(OnPaint()を妥当な時間内に終了させる)、この問題は解決されました。

この問題は知られていますか? OnPaint()の実行に定義された時間制限はありますか?

おかげで、

アレックス。

+1

処理部分をコメントにして、ウィンドウがまだ消えていないか確認してください。 – zar

答えて

0

http://msdn.microsoft.com/en-us/library/01c9aaty%28v=vs.80%29.aspx

UpdateWindow又はRedrawWindow メンバ関数が呼び出されたときにWM_PAINTメッセージが送信されます。

RDW_INTERNALPAINTフラグが設定されたRedrawWindowメンバ関数を呼び出すと、ウィンドウに内部ペイントメッセージが表示されることがあります。 この場合、ウィンドウには更新領域がない場合があります。アプリケーション は、GetUpdateRectメンバ関数を呼び出して、 ウィンドウに更新領域があるかどうかを判断する必要があります。 GetUpdateRectが0を返す場合、 アプリケーションはBeginPaintおよびEndPaintメンバ 関数を呼び出すべきではありません。

WM_PAINTメッセージが 無効領域との呼び出しの両方によって引き起こされた可能性があるため、その内部データの各WM_PAINTメッセージのための 構造を見ることで、任意の必要な 内部塗り替えや更新をチェックするために、アプリケーションの責任です RDW_INTERNALPAINTフラグが設定されたRedrawWindowメンバー関数。

内部WM_PAINTメッセージは、Windowsによって1回だけ送信されます。 内部WM_PAINTメッセージがUpdateWindow メンバ関数によってウィンドウに送信された後、ウィンドウが無効になるまで、またはRDW_INTERNALPAINTフラグが設定された状態でRedrawWindowメンバ 関数が再度呼び出されるまで、WM_PAINTメッセージは送信されません。

関連する問題