【发布时间】: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
标签: c++ winapi user-interface