2011-03-06 221 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