C++-MFC中绘图时间过长导致无法显示

发布于 2016-10-25 01:21:18 字数 765 浏览 1294 评论 1

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灵芸 2017-06-16 01:25:59

你这是写在一个按钮的处理中么?一般来说MFC的大部分内容都是运行在主线程里,其中所有的消息发送来之后都会分发给各个部分,比如这个按钮按下,然后就开始处理。此时的处理时阻断(Block)执行,就是不执行完你程序的主循环都是停在那里的,等待一个Sleep执行结束。
至于为什么调试时正常,运行时不正常,应该是Sleep在Debug和Release时的实现原理不同。

总的来说,你要想实现延时绘图,应该是按钮按下,添加一个计时器(Timer),然后在计时器的处理函数中完成工作,而不是这样直接Sleep。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文