窗体创建成功了,下面来说各种按钮控件的创建.
按钮控件类名是BUTTON
分为下面三种形状
- 普通的按钮控件
- 单选按钮控件
- 复选按钮控件
按钮的样式有:
下面我们就来创建这三个按钮:
//定义要创建的控件ID号
#define IDC_BUTTON1 1001
#define IDC_RADIOBUTTON1 1002
#define IDC_RADIOBUTTON2 1003
#define IDC_CHECKBOX1 1004
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HINSTANCE hInstance;
HWND hBtn1, hRadio1, hCheck1;
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_CREATE:
hInstance = ::GetModuleHandle(NULL);
//1.创建普通的下压式按钮
hBtn1 = ::CreateWindowEx(0,
TEXT("BUTTON"), TEXT("下压按钮"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, 100, 30,
hWnd, (HMENU)IDC_BUTTON1, hInstance, 0);
//2.创建单选按钮1
hRadio1 = ::CreateWindowEx(0, TEXT("BUTTON"), TEXT("单选按钮1"),
WS_CHILD | WS_VISIBLE |WS_GROUP|BS_AUTORADIOBUTTON,
10, 50, 100, 30,
hWnd, (HMENU)IDC_RADIOBUTTON1, hInstance, 0);
//3.创建单选按钮2
hRadio2 = ::CreateWindowEx(0, TEXT("BUTTON"), TEXT("单选按钮2"),
WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
10, 90, 100, 30,
hWnd, (HMENU)IDC_RADIOBUTTON2, hInstance, 0);
hCheck1 = ::CreateWindowEx(0, TEXT("BUTTON"), TEXT("复选按钮"),
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
10, 130, 100, 30,
hWnd, (HMENU)IDC_CHECKBOX1, hInstance, 0);
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021051013062935.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMxMTc4Njc5,size_16,color_FFFFFF,t_70)
按钮一般都只向父窗口发送单击,双击消息
我们在父窗口中来捕获按钮消息
按钮发送过来的WM_COMMAND消息参数说明:
wParam: 低字节是控件的ID号,LOWORD(wParam)
高字节是控件发送的事件消息ID号; HIWORD(wParam)
用这两个宏分别取出对应的ID值
lParam: 传过来的是控件句柄.HWND
```cpp
case WM_COMMAND:
if (LOWORD(wParam) == IDC_BUTTON1)
{
if (HIWORD(wParam) == BN_CLICKED)
{
MessageBox(hWnd, TEXT("按钮被鼠标单击"),
TEXT("Info Message"), MB_OK);
}
}
break;