有没有一种简单的方法来获取用于擦除窗口背景的笔刷的RGB?

时间:2019-04-18 01:59:39

标签: winapi gdi

我正在寻找一种更简单的方法(如果有)来找出Windows用于擦除窗口背景的画笔使用的RGB。

我要以最优雅的方式解决的问题如下:

注册课程时,我以这种方式指定画笔:

      hbrBackground   := GetSysColorBrush(COLOR_WINDOW);

在处理WM_PAINT时,我正在使用ExtTextOut指定ETO_OPAQUE和矩形(以便清除它)。

当前,我正在使用:

    SetBkColor(dc, GetSysColor(COLOR_WINDOW));

这有一个明显的缺点,如果注册类时使用的笔刷发生了变化,那么程序员必须记住或意识到必须对WM_PAINT中的SetBkColor指令进行相同的更改。那不好。

解决问题的一种方法是使用GetClassLongPtr获取背景画笔,然后在画笔上使用GetObject以获得其LOGBRUSH,其中包含画笔的RGB,可以将其传递给SetBkColor。

我的问题是:使用GetClassLongPtr和GetObject是获取我需要传递给SetBkColor的RGB值的最简单方法吗?我希望有比这更简单(更直接)的方法。

非常感谢您的帮助。

PS:我正在寻找一种直接的C / C ++或Delphi API解决方案。没有.net或任何其他框架解决方案。

0 个答案:

没有答案