在Visual C ++中刷新窗口

时间:2009-05-13 08:13:39

标签: c++ visual-c++ refresh

我有一个Visual C ++项目,但我无法刷新窗口并重绘自己。 我用过

RedrawWindow();
m_ProgressDlg->RedrawWindow();

以及

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

但似乎永远不会顺利。

我该怎么办?

6 个答案:

答案 0 :(得分:4)

您可以将UpdateWindowInvalidateRect结合使用,以便立即重绘。

答案 1 :(得分:2)

对于客户区使用InvalidateRect + UpdateWindow。 如果要重绘窗口的非客户区域,请尝试使用SWP_DRAWFRAME调用SetWindowPos。 SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE。

答案 2 :(得分:1)

:: InvalidateRect(hwnd,NULL,TRUE)WinAPI函数(或wnd-> InvalidateRect(NULL)方法)应该可以解决这个问题:它使客户区无效并导致系统将WM_PAINT发送到窗口以重绘它。如果你想立即重绘,你也应该在失效后调用UpdateWindow()。

答案 3 :(得分:1)

看起来你正在使用MFC。

我相信你的应用程序很忙,没有处理来自队列的消息,所以它没有处理会更新窗口的WM_PAINT。

使用RedrawWindow的RDW_UPDATENOW参数强制重绘,即使窗口正忙。

答案 4 :(得分:0)

但是在发布版本中,如果打开工作区似乎也没有正常运行

答案 5 :(得分:0)

如果“不顺利”意味着崩溃,你可能也会尝试调用Invalidate()和RedrawWindow(),而m_hWnd为NULL。尝试:

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

(我知道这已经过时了,但我们中的一些人仍然只有一只脚卡在MFC渣土中。)