Windows API学习-单选按钮、复选框、分组框控件(1)
- 简 介
- 下 载
- 留 言
- 说 明
单选按钮(Radio Button)和复选框(Check Box)是常见的Windows控件,用于从给出的选项中选择一项或多项
单选按钮是互斥的,只能选择其中一项;而复选框没有限制,可以选择一项或多项。
单选按钮和复选框都是一种特殊的按钮,窗口类名称都是button,只不过增加了一些特殊的窗口样式罢了。单选按钮的样式为BS_AUTORADIOBUTTON,复选框的样式为BS_AUTOCHECKBOX。要想为单选按钮分组,可以增加WS_GROUP样式。设置了 WS_GROUP 样式的单选框为一组中的首元素,随后的所有单选按钮都和它在同一组,直到下一个设置了 WS_GROUP 样式的单选按钮。
下面的代码,将实现上图中所示的单选按钮和复选框:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
//窗口过程 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; } |
运行效果: