擦除窗口背景win32API 我的同学开始用PASCAL使用Delphi,但是我作为C++的Primor必须使用Win32 API。他们正在改变背景颜色,所以我也需要知道这一点,但有一些不同之处

擦除窗口背景win32API 我的同学开始用PASCAL使用Delphi,但是我作为C++的Primor必须使用Win32 API。他们正在改变背景颜色,所以我也需要知道这一点,但有一些不同之处,c++,winapi,background,erase,C++,Winapi,Background,Erase,在delphi中,每个窗体看起来都有自己的实例,为一个窗口设置背景色只需更改一个值即可。与win32不同,当您更改该值时,它会影响使用该类的每个窗口(更新ofc后) 我需要做的是清除/擦除我的窗口背景。我可以用FillRect(…)实现这一点,它工作得非常好,但我发现它似乎也在做我需要的事情。他们提到,如果这个消息被处理,我应该返回一个非零,但他们没有告诉如何处理它 那么,FillRect(和similliar)还允许我用我定义的画笔(而不是类的默认画笔)擦除窗口吗 谢谢您只需擦除背景即可处理W

在delphi中,每个窗体看起来都有自己的实例,为一个窗口设置背景色只需更改一个值即可。与win32不同,当您更改该值时,它会影响使用该类的每个窗口(更新ofc后)

我需要做的是清除/擦除我的窗口背景。我可以用FillRect(…)实现这一点,它工作得非常好,但我发现它似乎也在做我需要的事情。他们提到,如果这个消息被处理,我应该返回一个非零,但他们没有告诉如何处理它

那么,FillRect(和similliar)还允许我用我定义的画笔(而不是类的默认画笔)擦除窗口吗


谢谢

您只需擦除背景即可处理
WM_ERASEBKGND
(使用
FillRect()
即可)


通过返回一个非零值,您只需告诉Windows此消息已处理完毕,无需进一步操作。没有比这更正式的了。

< P>如果你使用C++的MFC,你也可以检查这个框架的CWND::OnEraseBKGND的实现。

是的,正如我所说,我可以这样做。但是,难道没有像ClearBackground(手柄、颜色)这样的东西专门用于清除吗?很高兴知道FillRect()是正确的方法,只是好奇而已。ClearBackground==FillRect。您必须在win32中编写更明确的代码。我得先做刷子。这就是几乎所有人都使用类库的原因。@Raven-您认为
ClearBackground
在它的方法体中可能在做什么,可能调用
FillRect()
:)delphi vcl无疑会以这种方式实现它。如果您有一份delphi源代码的副本,那么您可以仔细阅读它,这将为您带来好处。您还应该阅读Petzold。@Raven:FillRect()在功能上与ClearBackground()有什么不同?两者都将矩形中的所有像素设置为指定的颜色。对整个客户端区域(或更新区域)执行此操作,背景将被清除。我真的不知道你还想要什么。如果你想在这么低的水平上学习Win API,你应该拿起Charles Petzold()的“编程Windows 3.1”的旧版本,看看Windows编程是从哪里开始的。它从哪里开始的?就在今天。只是我们用做脏活的框架来包装它。@David-这就是我的意思,只是表达得不太好:)