【问题标题】:Erase window background win32API擦除窗口背景win32API
【发布时间】:2011-07-09 23:52:43
【问题描述】:

我的同学们开始使用 Delphi 和 pascal,但我作为 c++ 程序员必须使用 win32 API。他们正在改变背景颜色,所以我也需要知道这一点,但有一些不同之处。

在 delphi 中,每个表单看起来都有自己的实例,为一个窗口设置背景颜色只是更改一个值的问题。 win32 的情况并非如此,当您更改该值时,它会影响使用该类的每个窗口(更新 ofc 之后)。

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

那么除了 FillRect(和类似的)之外,还有什么可以让我用我定义的画笔而不是类的默认值来擦除窗口吗?

谢谢

【问题讨论】:

  • 如果你想在这个低级别学习 Win API,你应该拿起 Charles Petzold (amazon.com/Programming-Windows-3-1-Charles-Petzold/dp/…) 的“Programming Windows 3.1”的旧副本,看看 Windows 编程是从哪里开始的。
  • 从哪里开始的?它今天仍然在哪里。只是我们用做脏活的框架来包装它。
  • @David - 这就是我的意思,但我没有很好地表达它:)

标签: c++ winapi background erase


【解决方案1】:

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

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

【讨论】:

  • 是的,正如我所说,我可以这样做。但是没有像 ClearBackground(handle, color) 这样专门用于清除的东西吗?很高兴知道 FillRect() 是正确的方法,只是好奇。
  • 清除背景 == FillRect。您必须处理在 win32 中编写更明确的代码。得先做那个刷子。这就是几乎所有人都使用类库的原因。
  • @Raven - 你认为ClearBackground 可能在它的方法体中做什么,可能调用FillRect() :)
  • delphi vcl 无疑会以这种方式实现它。如果你有一份 delphi 源代码的副本,那么你可以仔细阅读它,你会从中受益。您还应该阅读 Petzold。
  • @Raven:FillRect() 在功能上与 ClearBackground() 有何不同?两者都将矩形中的所有像素设置为指定的颜色。对整个客户区域(或更新区域)执行此操作,并清除背景。我不太确定您还在寻找什么。
【解决方案2】:

如果您使用 MFC 和 C++,您还可以查看该框架的 CWnd::OnEraseBkgnd 实现 http://msdn.microsoft.com/en-us/library/a0a52fkz(v=vs.80).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2015-11-13
    • 2020-09-02
    • 2019-10-02
    • 2010-10-01
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多