C++-MFC中绘图时间过长导致无法显示
void CDrawTrendDlg::OnBtnQuery() {
Sleep(60*1000); //去除后,图像正常显示
// MessageBox("!"); //加上messagebox后,图像正常显示
// RedrawWindow(); //无影响
CStatic* pDraw = (CStatic*)GetDlgItem(IDC_TREND_LINE);
// pDraw->RedrawWindow(); //无影响
CClientDC* pDC = new CClientDC(pDraw);
CRect rect;
pDraw->GetClientRect(&rect);
rect.bottom -= 20;
rect.left += 20;
pDC->MoveTo(rect.left, rect.bottom);
pDC->LineTo(rect.right, rect.bottom);
//箭头添加
pDC->MoveTo(rect.right-5, rect.bottom-5);
pDC->LineTo(rect.right, rect.bottom);
pDC->LineTo(rect.right-5, rect.bottom+5);
delete pDC;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你这是写在一个按钮的处理中么?一般来说MFC的大部分内容都是运行在主线程里,其中所有的消息发送来之后都会分发给各个部分,比如这个按钮按下,然后就开始处理。此时的处理时阻断(Block)执行,就是不执行完你程序的主循环都是停在那里的,等待一个Sleep执行结束。
至于为什么调试时正常,运行时不正常,应该是Sleep在Debug和Release时的实现原理不同。
总的来说,你要想实现延时绘图,应该是按钮按下,添加一个计时器(Timer),然后在计时器的处理函数中完成工作,而不是这样直接Sleep。