簡體   English   中英

為什么對 BeginPaint() 的調用總是生成 WM_NCPAINT 消息?

[英]Why does a call to BeginPaint() always generate a WM_NCPAINT message?

我在 Win32 API 上遇到問題。我有一個程序,當它處理WM_PAINT消息時,它調用BeginPaint來剪輯區域並驗證更新區域,但是BeginPaint function 總是生成具有相同更新的WM_NCPAINT消息區域,即使需要重新繪制的觸摸部分僅在客戶區域內。

有誰知道為什么會這樣? 它位於具有WS_CHILD樣式的子 windows 上。

WM_PAINT 的 MSDN 條目說:

如果必須繪制 882340040658988 幀,則 function可以向 window 過程發送WM_NCPAINT消息,如果必須擦除 window 背景,則發送WM_ERASEBKGND消息。

我試圖弄清楚為什么即使沒有觸及邊界它也總是發送。 我測試在控件內打開一個小記事本並最小化。 它不觸及控件的邊界,只是在內部並且BeginPaint()生成一個WM_NCPAINT

我想WM_NCPAINT消息總是在假設邊框也需要重新繪制的情況下發送的!

如果您調用SetWindowPos並將SWP_DEFERERASE作為參數傳遞給uFlags參數,會發生什么情況?

這應該可以防止生成WM_SYNCPAINT消息,這會間接導致發送WM_NCPAINT消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM