我在更改 winapi 应用程序中按钮的颜色时遇到问题。这是我的 winproc:
LRESULT CALLBACK WndProc(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
HWND A = NULL;
switch (message) {
case WM_CREATE:
A = CreateWindow(
L"BUTTON",
L"A", // Button text
WS_TABSTOP | WS_VISIBLE | WS_CHILD,
0,
0,
(maxX) / 2,
(maxY) / 2,
hWnd,
NULL,
(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
NULL
);
break;
case WM_DESTROY:
DestroyWindow(hWnd);
break;
case WM_CTLCOLORBTN:
SetBkColor(GetDC(A), RGB(255, 0, 0));
return (INT_PTR)CreateSolidBrush(RGB(255, 0, 0));
break;
default:
return DefWindowProc(
hWnd,
message,
wParam,
lParam
);
}
return 0;
}
我创建了按钮,效果很好,当我在调试模式下测试它时,它会显示在应用程序上。问题是它似乎不想改变颜色。
我在文档中看到它说:
默认情况下,DefWindowProc 函数选择按钮的默认系统颜色。具有
、BS_PUSHBUTTON
或BS_DEFPUSHBUTTON
样式的按钮不使用返回的画笔。具有这些样式的按钮始终使用默认的系统颜色绘制。绘制按钮需要几种不同的画笔(面、高光和阴影),但 WM_CTLCOLORBTN 消息只允许返回一种画笔。要为按钮提供自定义外观,请使用所有者绘制的按钮。有关更多信息,请参阅创建所有者绘制的控件。BS_PUSHLIKE
所以我从按钮上删除了
BS_DEFPUSHBUTTON
,但它仍然不起作用。
有人可以帮我把按钮改成不同的颜色吗?