2008-09-19 20 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消息。

相關問題