单选按钮(Radio Button)和复选框(Check Box)是罕见的Windows控件,用于从给出的选项当选择一项或多项,如下图所示:
Windows单选按钮、复选框、分组框控件_button
单选按钮是互斥的,只能选择个中一项;而复选框没无限制,可以选择一项或多项。
单选按钮和复选框多是一种特别的按钮,窗口类称号多是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; //单选按钮--男 static HWND radioFemale; //单选按钮--女 //一组单选按钮 static HWND labMarriage; //静态文本框--婚姻情况 static HWND radioMarried; //单选按钮--已婚 static HWND radioSingle; //单选按钮--未婚 static HWND radioSecrecy; //单选按钮--失密 //一组复选框 static HWND labPet; //静态文本框--你的宠物 static HWND checkboxDog; //复选框--狗 static HWND checkboxCat; //复选框--猫 static HWND checkboxFish; //复选框--鱼 static HWND checkboxOther; //复选框--其他 switch (message){ case WM_CREATE: hFont = CreateFont( -14, -7, 0, 0, 400, FALSE, FALSE, FALSE,DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, TEXT("微软雅黑") ); //选择性别 labSex = CreateWindow( TEXT("static"), TEXT("你的性别:"), WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE | SS_RIGHT/*文字居右*/, 10, 10, 80, 26, hWnd, (HMENU)1, hInst, NULL); radioMale = CreateWindow( TEXT("button"), TEXT("男"), WS_CHILD | WS_VISIBLE | BS_LEFT/*文字居左*/ | BS_AUTORADIOBUTTON /*单选按钮*/ | WS_GROUP, 95, 10, 50, 26, hWnd, (HMENU)2, hInst, NULL); radioFemale = CreateWindow( TEXT("button"), TEXT("女"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTORADIOBUTTON, 150, 10, 50, 26, hWnd, (HMENU)2, hInst, NULL); //选择婚姻情况 labMarriage = CreateWindow( TEXT("static"), TEXT("婚姻情况:"), WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE | SS_RIGHT, 10, 40, 80, 26, hWnd, (HMENU)4, hInst, NULL); radioMarried = CreateWindow( TEXT("button"), TEXT("已婚"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTORADIOBUTTON | WS_GROUP, 95, 40, 65, 26, hWnd, (HMENU)5, hInst, NULL); radioSingle = CreateWindow( TEXT("button"), TEXT("未婚"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTORADIOBUTTON, 165, 40, 65, 26, hWnd, (HMENU)6, hInst, NULL); radioSecrecy = CreateWindow( TEXT("button"), TEXT("失密"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTORADIOBUTTON, 235, 40, 100, 26, hWnd, (HMENU)7, hInst, NULL); //你的宠物 labPet = CreateWindow( TEXT("static"), TEXT("你的宠物:"), WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE | SS_RIGHT, 10, 70, 80, 26, hWnd, (HMENU)8, hInst, NULL); checkboxDog = CreateWindow( TEXT("button"), TEXT("狗"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTOCHECKBOX/*复选框*/, 95, 70, 50, 26, hWnd, (HMENU)9, hInst, NULL); checkboxCat = CreateWindow( TEXT("button"), TEXT("猫"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTOCHECKBOX, 150, 70, 50, 26, hWnd, (HMENU)10, hInst, NULL); checkboxFish = CreateWindow( TEXT("button"), TEXT("鱼"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTOCHECKBOX, 205, 70, 50, 26, hWnd, (HMENU)11, hInst, NULL); checkboxOther = CreateWindow( TEXT("button"), TEXT("其他"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTOCHECKBOX, 260, 70, 65, 26, hWnd, (HMENU)11, hInst, NULL); SendMessage(labSex, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(radioMale, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(radioFemale, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(labMarriage, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(radioMarried, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(radioSingle, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(radioSecrecy, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(labPet, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(checkboxDog, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(checkboxCat, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(checkboxFish, WM_SETFONT, (WPARAM)hFont, NULL); SendMessage(checkboxOther, WM_SETFONT, (WPARAM)hFont, NULL); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO:  在此添加恣意画图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }

分组框控件

运用分组框控件(GroupBox)可以对单选按钮、复选框停止更好的分组,如下图所示:
Windows单选按钮、复选框、分组框控件_Windows_02
分组框控件也是一种特别的按钮,它的款式为BS_GROUPBOX,例如:

			//创立分组框控件 hGroupSex = CreateWindow( TEXT("button"), TEXT("你的性别"), WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 20, 20, 300, 70, hWnd, (HMENU)1, hInst, NULL); //接下来添加单选按钮 hRadioMale = CreateWindow( TEXT("button"), TEXT("男"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTORADIOBUTTON /*单选按钮*/, 15, 30, 50, 26, hGroupSex /*父窗口为 GroupBox 控件*/, (HMENU)2, hInst, NULL); hRadioFemale = CreateWindow( TEXT("button"), TEXT("女"), WS_CHILD | WS_VISIBLE | BS_LEFT | BS_AUTORADIOBUTTON, 80, 30, 50, 26, hGroupSex, (HMENU)3, hInst, NULL);

该代码将会创立上图中的第一组按钮。
需求留意的是:单选按钮的父窗口为分组框控件 hGroupSex,而不是顶级窗口 hWnd。