C++ 正在尝试使用GetObject()获取默认背景色;
我正在尝试使用以下代码以C++ 正在尝试使用GetObject()获取默认背景色;,c++,winapi,user-interface,C++,Winapi,User Interface,我正在尝试使用以下代码以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 | M
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);
但是,当设置窗口的classhbrBackground
为(HBRUSH)COLOR\u BACKGROUND
时,它返回0x003E28F4
,该值为红色,如下所示:
WndClass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
窗口的背景色显示为灰色(在WinXP上),带有十六进制代码0x00C8D0D4(使用gimp检查)
据我所知,0x003E28F4
和0x00C8D0D4
不一样
这是什么原因造成的?如何获得RGB/COLORREF格式的默认背景色?您不应该使用
GetSysColor(color\u background)
您是否尝试过
(HBRUSH)COLOR\u BACKGROUND-1
?GetObject返回什么?您不能使用COLOR\u BACKGROUND
调用GetObject
,它只能与WndClass.hbrBackground一起使用,因此返回垃圾。除此之外,您还需要向其添加1