Visual C++ プロジェクトを使用していますが、ウィンドウを更新して再描画することができません。私は使用しました
RedrawWindow();
m_ProgressDlg->RedrawWindow();
そしてまた
UpdateData(false);
m_ProgressDlg->UpdateData(false);
しかし、決してうまくいくようには見えません。
どのようにできるのか?
Visual C++ プロジェクトを使用していますが、ウィンドウを更新して再描画することができません。私は使用しました
RedrawWindow();
m_ProgressDlg->RedrawWindow();
そしてまた
UpdateData(false);
m_ProgressDlg->UpdateData(false);
しかし、決してうまくいくようには見えません。
どのようにできるのか?
UpdateWindowをInvalidateRectと組み合わせて使用すると、すぐに再描画できます。
クライアント領域では、InvalidateRect + UpdateWindow を使用します。ウィンドウの非クライアント領域を再描画する場合は、SWP_DRAWFRAME | で SetWindowPos を呼び出してみてください。SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE。
MFCを使用しているようです。
アプリがビジーで、キューからのメッセージを処理していないため、ウィンドウを更新するWM_PAINTを処理していないと思います。
ウィンドウがビジーの場合でも、RedrawWindowでRDW_UPDATENOWパラメータを使用して、強制的に再描画します。
::InvalidateRect(hwnd, NULL, TRUE) WinAPI 関数 (または wnd->InvalidateRect(NULL) メソッド) がこのトリックを実行する必要があります。クライアント領域を無効にし、システムが WM_PAINT をウィンドウに送信して再描画するようにします。すぐに再描画したい場合は、無効化の直後に UpdateWindow() も呼び出す必要があります。
しかし、リリース版では、openeed worspace を使用しているように見える場合でも、正しく機能しません。
また、m_hWnd が NULL のときに Invalidate() と RedrawWindow() を呼び出そうとしている可能性もあります (「うまくいかない」ということでクラッシュする場合)。試す:
if (m_hWnd)
{
Invalidate();
RedrawWindow();
}
(これが古いことは承知していますが、まだ MFC の泥に片足が引っかかっている人もいます。)