尝试使用 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 检查)。
据我所知,0x003E28F4
和 0x00C8D0D4
是不一样的
这是什么原因造成的?如何获取 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() 获取默认背景颜色;的主要内容,如果未能解决你的问题,请参考以下文章