2008-09-19 62 views
2

我在Win32 API上遇到问题。我有一个程序,当它处理WM_PAINT消息时,它会调用BeginPaint来裁剪区域并验证更新区域,但BeginPaint函数始终会生成具有相同更新区域的WM_NCPAINT消息,即使需要重新绘制的被触摸零件是只在客户区域内。为什么对BeginPaint()的调用总是生成WM_NCPAINT消息?

有没有人有任何线索为什么会发生这种情况?它在WS_CHILD风格的儿童窗户上。

+0

你能详细解释为什么这会导致你的问题? – 2008-09-19 14:38:53

+0

大部分性能,因为即使帧不脏也会产生帧重绘。我有一个用CSS盒子模型设置的小部件,我使用框架来做边距,边框和填充。 – 2008-09-19 17:08:32

回答

0

我猜WM_NCPAINT消息总是发送,并假定边界也需要重新绘制!

1

为WM_PAINT的MSDN词条中说:

功能可以也发送WM_NCPAINT消息到窗口过程,如果窗口框架必须涂并发送WM_ERASEBKGND消息,如果窗口背景,必须先擦除。

我想弄清楚为什么总是发送即使边界没有被触及。我测试在控件内部打开一个小记事本并尽量减少。它不会触及控件的边界,只是在里面,并且BeginPaint()会生成WM_NCPAINT

0

如果您拨打SetWindowPos并通过​​作为参数uFlags参数,会发生什么情况?

这应防止生成WM_SYNCPAINT消息,这将间接导致发送WM_NCPAINT消息。

相关问题