单选按钮控件和复选框控件_单选按钮控件和复选框控件都具有

单选按钮控件和复选框控件_单选按钮控件和复选框控件都具有Windows单按钮、复选框、分组框控件单选按钮(Radio Button)和复选框(Check Box)是常见的Windows控件,用于从给出的选项中选择一项或多项,如下图所示:单选钮与复选框单选按钮是互斥的,只能选择其中一项;而复选框没有限制,可以选择一项或多项。单选按钮和复选框都是一种特殊的按钮,窗口类名称都是button,只不过增加了一些特殊的窗口样式罢了。单选按钮的样式为BS_…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Windows单按钮、复选框、分组框控件

单选按钮(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;  //单选按钮--男
    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)可以对单选按钮、复选框进行更好的分组,如下图所示:
在这里插入图片描述
分组框控件也是一种特殊的按钮,它的样式为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。

完整的示例代码较长,就不在这里展示了,如有需要,请继续查看本节完整代码。

链接https://blog.csdn.net/weixin_45525272/article/details/104332539

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170967.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • arp命令_arp协议的主要功能是什么

    arp命令_arp协议的主要功能是什么ARP(AddressResolutionProtocol)命令用于显示和修改“地址解析协议(ARP)”缓存中的项目ARP把IP地址解析成LAN硬件使用的媒体访问控制地址。以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包原理某机器A要向主机B发送报文,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后就会进行数据传输。如果未找到,则广播A一个A

    2025年8月19日
    7
  • c数组求和[通俗易懂]

    c数组求和[通俗易懂]C语言数组求和#include<stdio.h>intaddarray(intarray[],intn);//声明intmain(void){ intdata[]={0,1,2,3,4,5,6,7,8,9}; intsize=sizeof(intdata/intdata[0])//用数组的总长度/每个的长度,得出数据有多少个 printf(“结果是:%d\n”,addarry(data,size));//函数返回值输出 return0;}intadd

    2022年10月2日
    4
  • phony 详解_phoning翻译

    phony 详解_phoning翻译phony详解1:一个目标,可以产生target文件,也可以不产生target文件echo目标就不产生echo文件不产生文件,则每次makeecho。都将执行recipe。因为make总是妄图产生一个比temp更新的target–echo文件。echo:temp@echo”$(shellls-ltemp)”2:一个目标,可以

    2025年7月13日
    5
  • MLP综述

    MLP综述MLP整体思路反向传播算法梯度下降算法

    2022年6月17日
    25
  • Wireshark抓包——ICMP协议分析

    Wireshark抓包——ICMP协议分析内容:使用Wireshark抓包,分析较简单的数据包。环境:Windows7,Wireshark。ping是用来测试网络连通性的命令。一旦发出ping命令,主机会发出连续的测试数据包到网络中,在通常的情况下,主机会收到回应数据包,ping采用的是ICMP协议。例1:对pingwww.baidu.com进行抓包和分析,过程如下:第一步,确定目标地址,选择www.b…

    2022年7月12日
    16
  • 反射之invoke方法

    反射之invoke方法当获得类对应的Class对象后,可以通过getMethods()方法得到全部方法——返回Method数组,或者getMethod()方法来获取指定方法——Method对象。可以通过Method对象的invoke()方法来调用它对应的方法。Objectinvoke(Objectobj,Object…args):obj是执行该方法的Class对象,args是执行该方法时传入的实参。

    2022年5月20日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号