vc技术内幕里面碰到的onpaint问题
《vc技术内幕(第四版)》的6.8节主题是“在对话框窗口内绘图”,讲述了在一个静态控件中绘制一个小黑方块:
void CMyDialog::OnPaint()
{
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
CDC* pControlDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pControlDC->SelectStockObject(BLACK_BRUSH);
pControlDC->Rectangle(0, 0, 10, 10);
pWnd->ReleaseDC(pControlDC);
}
我觉得不妥,试了一下,如果一直在那里循环调用,CPU占用100%。
查了相同问题的帖子,也没怎么搞清楚,有人说用beginpaint endpaint能解决?好像也不行啊
谢谢!!
问题点数:20、回复次数:5Top
1 楼YufengShi(浪子)回复于 2006-03-03 00:10:19 得分 0
OnPaint函数里第一行加上
CPaintDC dc(this);Top
2 楼glchen57(谁与共)回复于 2006-03-03 09:34:57 得分 0
楼上正解!
能否解释以下,为什么加上这行就没事了?只得到dc,也没用它?Top
3 楼doon(vecodo)回复于 2006-03-03 09:48:31 得分 0
删除
pWnd->Invalidate();
pWnd->UpdateWindow();
这两句
他们都引起了WM_PAINT消息Top
4 楼glchen57(谁与共)回复于 2006-03-03 10:04:45 得分 0
又有一个问题,如果小黑方块画在静态控件上,自然问题不大,但是如果我把方块画在按钮上,也就是上面的程序段中 CWnd* pWnd = GetDlgItem(IDC_STATIC1);改成 CWnd* pWnd = GetDlgItem(IDC_BUTTON1);,其中IDC_BUTTON1是窗口上的一个按钮,
这样的话,我一点击按钮,方块就不见了。YufengShi(浪子)的方法也失效了Top
5 楼sojoy131(小菜鸟要变大菜鸟)回复于 2006-03-03 10:42:01 得分 0
在按钮响应函数里面加上pWnd->Invalidate();可不可以?Top




