按钮属于window中的一个系统窗口类,窗口类名为button。所以我们可以直接通过CreateWindow创建一个按钮。可以在Window的WM_CREATE事件中创建一个按钮作为窗口的子窗体。
void CreateBtn(HWND parent) {
btnHwnd = CreateWindow(L"button",
L"按钮控件",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_BITMAP,
0, 0,
200, 200,
parent,
(HMENU)111,
thisInstance,
NULL
);
HANDLE hBmp = LoadImage(NULL, L"d:\\a.bmp", IMAGE_BITMAP, 200, 200, LR_LOADFROMFILE);
SendMessage(btnHwnd, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmp);//设置按钮的背景图像
}
按钮的点击事件,通过WM_COMMAND消息发送。
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case 111: {
if (HIWORD(wParam) == BN_CLICKED) {
WriteFile("BN_CLICKED");
}
if (HIWORD(wParam) == BN_DOUBLECLICKED)
{
WriteFile("BN_DOUBLECLICKED");
}
break;
}
default:
break;
}
}
注意这里的111和我们创建button按钮时候的倒数第三个参数保持一致,才能正确监听到点击事件。
按钮美化:加背景图像,可以通过发送SendMessage消息设置按钮的背景图像。
HANDLE hBmp = LoadImage(NULL, L"d:\\a.bmp", IMAGE_BITMAP, 200, 200, LR_LOADFROMFILE);
SendMessage(btnHwnd, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmp);//设置按钮的背景图像
创建文本控件
void CreateStatic(HWND parent) {
staticHwnd = CreateWindow(L"static",
L"我是文本",
WS_CHILD | WS_VISIBLE | SS_SIMPLE,
200, 400,
200, 200,
parent,
(HMENU)222,
thisInstance,
NULL);
SetWindowText(staticHwnd, L"我是曹瑞鹏");//设置控件文本
HANDLE hBmp = LoadImage(NULL, L"d:\\a.bmp", IMAGE_BITMAP, 200, 200, LR_LOADFROMFILE);
SendMessage( staticHwnd, STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM)hBmp);//设置按钮的背景图像
}
可以通过SendMessage
设置控件背景图片,不过需要设置样式为SS_BITMAP
,而不是SS_SIMPLE
。