win32 api 给子控件 BUTTION 填充背景色 代码例子
时间: 2024-09-29 20:15:33 浏览: 76
在Windows API中,如果你想要给一个Button子控件填充背景色,你需要使用CreateWindowEx函数创建窗口,并通过SetWindowLong或SetWindowStyleEx设置窗口样式来实现实体外观的自定义。这里是一个简单的示例,假设我们想在一个对话框上创建一个带背景色的Button:
```cpp
#include <windows.h>
#include <commctrl.h> // 引入对话框控件头文件
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_CREATE:
{
HINSTANCE hInstance = GetModuleHandle(NULL);
// 创建对话框模板
DWORD dwExStyles = WS_EX_CLIENTEDGE; // 添加一些基本样式
DWORD dwStyles = WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON; // Button样式
// 设置按钮的颜色 - 这里用的是RGB值
HBRUSH brush = CreateSolidBrush(RGB(255, 0, 0)); // 红色背景
SendMessage(hWnd, WM_SETBKCOLOR, 0, (LPARAM)brush); // 将颜色设置为按钮背景
// 使用CreateWindowEx创建对话框并添加按钮
HWND button = CreateWindowEx(
dwExStyles,
"BUTTON", // 控件类名
"My Button", // 文本
dwStyles,
0, 0, 100, 50, // 宽高位置
hWnd, // 对话框句柄
NULL, // 参数
hInstance,
NULL
);
// 注册对话框消息处理函数
SetWindowLong(button, GWL_WNDPROC, (LONG_PTR)WndProc);
// 清理HBRUSH
DeleteObject(brush);
return 0;
}
// ... 其他消息处理...
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASS wc = {0};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.lpszClassName = L"MyWindowClass";
if (!RegisterClass(&wc)) {
return 0;
}
HWND hWnd = CreateWindow(wc.lpszClassName, L"My Dialog", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
阅读全文