读书人

Invalidate amp; SendMessage的有关问题

发布时间: 2012-01-24 23:11:55 作者: rapoo

Invalidate & SendMessage的问题
在某函数A里
{
m_rect = CRect(20, 20, 210, 210);
Invalidate();
// SendMessage(WM_PAINT); ///****///
m_rect = CRect(300, 20, 510, 210);
}

而在OnDraw里
{
...
pDC-> Draw3dRect(m_rect, 0x00FF0000, 0x0000FF00);
}
当触发A函数时绘出的矩形位置在(300, 20, 510, 210),但是当加上//的那句后
却绘出在(20, 20, 210, 210),这是为什么?

[解决办法]
SendMessage会等到WM_PAINT执行完后再返回
在调用SendMessage前m_rect = CRect(20, 20, 210, 210)

也就是WM_PAINT, 用的是CRect(20, 20, 210, 210)
[解决办法]
把WM_PAINT发送到视图框架内,需要等A函数结束后才执行WM_PAINT这个响应,此时只有m_rect = CRect(300, 20, 510, 210);被记录,所以绘出在(20, 20, 210, 210)

读书人网 >VC/MFC

热点推荐