0

Visual C++ プロジェクトを使用していますが、ウィンドウを更新して再描画することができません。私は使用しました

RedrawWindow();
m_ProgressDlg->RedrawWindow();

そしてまた

UpdateData(false);
m_ProgressDlg->UpdateData(false);

しかし、決してうまくいくようには見えません。

どのようにできるのか?

4

6 に答える 6

5

UpdateWindowをInvalidateRectと組み合わせて使用​​すると、すぐに再描画できます。

于 2009-05-13T08:54:37.573 に答える
2

クライアント領域では、InvalidateRect + UpdateWindow を使用します。ウィンドウの非クライアント領域を再描画する場合は、SWP_DRAWFRAME | で SetWindowPos を呼び出してみてください。SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE。

于 2009-05-13T12:03:52.337 に答える
1

MFCを使用しているようです。

アプリがビジーで、キューからのメッセージを処理していないため、ウィンドウを更新するWM_PAINTを処理していないと思います。

ウィンドウがビジーの場合でも、RedrawWindowでRDW_UPDATENOWパラメータを使用して、強制的に再描画します。

于 2009-05-13T08:31:26.067 に答える
1

::InvalidateRect(hwnd, NULL, TRUE) WinAPI 関数 (または wnd->InvalidateRect(NULL) メソッド) がこのトリックを実行する必要があります。クライアント領域を無効にし、システムが WM_PAINT をウィンドウに送信して再描画するようにします。すぐに再描画したい場合は、無効化の直後に UpdateWindow() も呼び出す必要があります。

于 2009-05-13T08:18:32.157 に答える
0

しかし、リリース版では、openeed worspace を使用しているように見える場合でも、正しく機能しません。

于 2009-05-13T10:22:05.060 に答える
0

また、m_hWnd が NULL のときに Invalidate() と RedrawWindow() を呼び出そうとしている可能性もあります (「うまくいかない」ということでクラッシュする場合)。試す:

if (m_hWnd)
{
   Invalidate();
   RedrawWindow();
}

(これが古いことは承知していますが、まだ MFC の泥に片足が引っかかっている人もいます。)

于 2018-05-03T18:18:08.827 に答える