我有一个Visual C ++项目,但我无法刷新窗口并重绘自己。 我用过
RedrawWindow();
m_ProgressDlg->RedrawWindow();
以及
UpdateData(false);
m_ProgressDlg->UpdateData(false);
但似乎永远不会顺利。
我该怎么办?
答案 0 :(得分:4)
您可以将UpdateWindow与InvalidateRect结合使用,以便立即重绘。
答案 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渣土中。)