参考博客:
参考文档:
1、步骤
首先需要创建一个按钮。
按钮相当于一个Window,因此也是用CreateWindow函数创建按钮,此时dwStyle参数要设为WS_VISIBLE和WS_CHILD,具体参照Window Styles文档,而hWndParent参数要设为hwnd,即父窗口的句柄。
响应按钮消息
点击按钮时会发送WM_COMMAND消息,然而如何获取按钮的id呢?可以在创建按钮时,将hMenu参数设置为id,然后在消息处理函数中设置当LOWORD(wParam)为按钮的id时做一些事情。
2、代码
//消息处理函数
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
) {
switch (uMsg)
{
//在创建窗口时创建按钮
case WM_CREATE:
{
HWND hwndButton = CreateWindow(
L"BUTTON",
L"点我",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
200,
180,
100,
50,
hwnd,
(HMENU)ID_BTN,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL);
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case ID_BTN:
{
//可以显示一个弹框
//MessageBox(hwnd, L"你点击了一个按钮", L"哈哈", MB_YESNO | MB_ICONQUESTION);
//也可以设置button的文字,需要用到SendMessage函数,其中操作目标的句柄应设为当前控件的句柄
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"已点击");
break;
}
default:
break;
}
}
break;
case WM_DESTROY:
//因为hRoot已被分配给窗口,将自动销毁,否则需要调用DestroyMenu(hRoot);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
}
return 0;
}
3、运行效果
设置点击按钮改变按钮文字
设置点击按钮弹出消息框