尝试使用 GetObject() 获取默认背景颜色;

Posted

技术标签:

【中文标题】尝试使用 GetObject() 获取默认背景颜色;【英文标题】:Trying to get default background color with GetObject(); 【发布时间】:2013-03-08 17:01:44 【问题描述】:

我正在尝试使用此代码以COLORREF 格式获取默认的 Windows 系统背景颜色:

 LOGBRUSH lb;
 GetObject((HANDLE)(COLOR_BACKGROUND), sizeof(LOGBRUSH), &lb);
 BG_COLOR = lb.lbColor;
 char buff[250];
 sprintf(buff, "BG_COLOR: 0x%08X;", BG_COLOR);
 MessageBoxA(0, buff, "Alert!", MB_OK | MB_SYSTEMMODAL);

但它返回0x003E28F4,这是红色,同时将窗口的类hbrBackground设置为(HBRUSH)COLOR_BACKGROUND,如下所示:

WndClass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;

窗口的背景颜色显示为 灰色(在 WinXP 上),十六进制为 0x00C8D0D4(用 gimp 检查)。

据我所知,0x003E28F40x00C8D0D4 是不一样的

这是什么原因造成的?如何获取 RGB/COLORREF 格式的默认背景颜色?

【问题讨论】:

你试过(HBRUSH)COLOR_BACKGROUND-1 吗? GetObject 返回什么? 你不能用COLOR_BACKGROUND调用GetObject,它只能和WndClass.hbrBackground一起使用,因此返回垃圾。此外,您需要向其添加 1 【参考方案1】:

你不应该使用GetSysColor(COLOR_BACKGROUND)

http://msdn.microsoft.com/en-gb/library/windows/desktop/ms724371(v=vs.85).aspx

【讨论】:

以上是关于尝试使用 GetObject() 获取默认背景颜色;的主要内容,如果未能解决你的问题,请参考以下文章

获取 Swing 组件的默认背景颜色

如何改变webView背景颜色?

画布不透明 - 更改默认背景颜色

尝试获取按钮的背景颜色时出现 java.lang.ClassCastException

更改 ListView 项目背景颜色但保留默认选择器样式?

从背景中的窗口获取像素颜色