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);
但是,当设置窗口的class
hbrBackground
(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