单选按钮(Radio Button)和复选框(Check Box)是常见的Windows控件,用于从给出的选项中选择一项或多项,如下图所示:
单选按钮是互斥的,只能选择其中一项;而复选框没有限制,可以选择一项或多项。
单选按钮和复选框都是一种特殊的按钮,窗口类名称都是button,只不过增加了一些特殊的窗口样式罢了。单选按钮的样式为BS_AUTORADIOBUTTON,复选框的样式为BS_AUTOCHECKBOX。例如:
//创建一个单选按钮
CreateWindow(
TEXT("button"), TEXT("单选按钮"),
WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTORADIOBUTTON/*单选按钮*/,
235, 40, 100, 26,
hWnd, (HMENU)7, hInst, NULL
);
//创建一个复选框
CreateWindow(
TEXT("button"), TEXT("复选框"),
WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTOCHECKBOX/*复选框*/,
95, 70, 50, 26,
hWnd, (HMENU)9, hInst, NULL
);
如上图所示,单选按钮一般是分组的,一组单选按钮之间是互斥的,只能选择其中一个。一个窗口可以包含多组单选按钮。
要想为单选按钮分组,可以增加WS_GROUP样式。设置了 WS_GROUP 样式的单选框为一组中的首元素,随后的所有单选按钮都和它在同一组,直到下一个设置了 WS_GROUP 样式的单选按钮。
下面的代码,将实现上图中所示的单选按钮和复选框:
//窗口过程
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
PAINTSTRUCT ps;
HDC hdc;
static HFONT hFont; //逻辑字体
//一组单选按钮
static HWND labSex; //静态文本框--性别
static HWND radioMale; //单选按钮--男