6
我從來不明白爲什麼擦除背景有一個單獨的窗口消息。我看起來有點多餘。當我創建了自定義按鈕時,我總是從WM_PAINT中清除背景。我有時甚至在WM_ERASEBKGND內完成了所有繪畫,並將WM_PAINT留空。兩者似乎都很好。將繪畫分成兩個操作有什麼好處嗎?爲什麼WM_ERASEBKGND有單獨的消息
我從來不明白爲什麼擦除背景有一個單獨的窗口消息。我看起來有點多餘。當我創建了自定義按鈕時,我總是從WM_PAINT中清除背景。我有時甚至在WM_ERASEBKGND內完成了所有繪畫,並將WM_PAINT留空。兩者似乎都很好。將繪畫分成兩個操作有什麼好處嗎?爲什麼WM_ERASEBKGND有單獨的消息
這完全猜測:
回到古時,填充色的矩形是一個相對緩慢的操作。但是填充一個大矩形比填充很多小矩形要快得多。
我猜如果你有一個帶有子窗口的窗口,並且它們都有相同的註冊背景畫筆,那麼Windows足夠聰明地意識到它不需要發送一個WM_ERASEBKGND給它已經清除的孩子父母。在非常緩慢的PC上使用適度複雜的對話框,這可能是一個重大改進。
如下面解釋的那樣,這是一個過去的剩餘物。對於現代應用程序,您應始終返回1(TRUE)以響應'WM_ERASEBKGND',並在WM_PAINT中執行繪圖(以避免閃爍)。僅畫一次畫面以避免閃爍也很重要。如果你需要繪製一些奇特的東西,使用內存DC來首先繪製。如果希望'WM_PAINT'有自己的擦除功能,可以通過手動方式獲得[此處](http://blogs.msdn.com/b/oldnewthing/archive/2011/05/20/10166505.aspx) – demorge 2012-02-27 16:44:24
@demorge ,那麼你應該從'WM_ERASEBKGND'返回'FALSE'。 – finnw 2012-07-06 01:27:51