2011-03-06 145 views
2

我的同學們開始使用Delphi與pascal,但我作爲C++ porgrammer必須使用win32 API。他們正在改變背景顏色,所以我需要知道這一點,但也有一些不同之處。清除窗口背景win32API

在delphi中,每個表單看起來都有它自己的實例,並且爲一個窗口設置背景顏色只是改變一個值的問題。與win32不同的是,當您更改該值時,會影響使用該類的每個窗口(在更新ofc後)。

我需要做的是清除/擦除我的窗口背景。我可以用FillRect(..)做到這一點,它的工作非常好,但我也發現WM_ERASEBKGND這似乎正在做我所需要的。他們提到,如果這個消息被處理,我應該返回一個非零值,但他們沒有告訴如何處理它。

那麼還有什麼其他的東西,然後FillRect(和similliar)讓我用我定義的畫筆擦除窗口,而不是默認的類?

感謝

+0

如果您想了解在這個低水平的運API,你應該拿起一箇舊副本Charles Petzold編寫的「Programming Windows 3.1」(http://www.amazon.com/Programming-Windows-3-1-Charles-Petzold/dp/1556153953)以及Windows編程開始的地方。 – Tony 2011-03-06 22:52:31

+1

它在哪裏開始?今天仍然是。只是我們用做了骯髒工作的框架來包裝它。 – 2011-03-06 22:54:30

+0

@大衛 - 這就是我的意思,但只是沒有說得很好:) – Tony 2011-03-06 23:03:07

回答

10

您只需通過擦除背景(使用FillRect()是罰款)處理WM_ERASEBKGND

通過返回一個非零值,您只是告訴Windows該消息已被照顧並且不需要進一步的操作。沒有比這更正式的了。

+0

是的,因爲我說我可以這樣做。但是有沒有像ClearBackground(句柄,顏色)爲清除做特殊處理?很高興知道FillRect()是正確的方式,只是好奇。 – Raven 2011-03-06 22:46:25

+0

ClearBackground == FillRect。你必須處理在win32中編寫更多明確的代碼。首先要製作那把刷子。這就是爲什麼幾乎任何人都使用類庫。 – 2011-03-06 22:50:43

+0

@Raven - 你覺得'ClearBackground'可能在做它的方法體,可能調用'FillRect()':) – Tony 2011-03-06 22:50:46