• MFC下拉框控件用法


    目录

    一、属性方式设置下拉框内容

    1.Combo Box下拉框

    2.Data属性

    3.Type属性

    4.Sort属性

    二、初始化OnInitDialog设置下拉框内容

    1.添加Combo Box下拉框变量

    2.AddString方法添加选项

    3.SetCurSel设置默认显示内容

    4.InsertString方法插入内容 

    4.DeleteString删除指定位置的内容

    5. GetLBText索引内容MessageBox弹出

    三、用代码监听事件

    四、结语


    一、属性方式设置下拉框内容

    1.Combo Box下拉框

    下拉框在工具箱里的名字是Combo Box,将其拖入界面中即可

    2.Data属性

    在Data中写入想要在下拉框中展示的选项,以英文状态下的分号";''分隔每一项

    可乐;雪碧;柠檬水

    运行后没有初始化的显示内容,下拉框的选项选中后可进行文字修改 

    3.Type属性

    默认的属性是Dropdown 可以对下拉框进行编辑的 ,把它修改成下来列表或者Drop List(2015以前的版本是Drop List)就不可以对下拉选项进行操作了

     

    4.Sort属性

    默认的Sort自动排序是按ASCLL码来编排的,就导致我们在Data里输入的是可乐;雪碧;柠檬水

    而展示的却是   可乐;柠檬水;雪碧  

    把默认排序关掉,改为false,即可按照输入的顺序来排列

    二、初始化OnInitDialog设置下拉框内容

    1.添加Combo Box下拉框变量

    修改变量类别为控件Control类别(一般只有像编辑框类型的才用value值类型),变量名改为m_abx1,作用域改为private(私有权限)修改好后点 完成 创建成功

    创建好的变量可在类视图——C文件名Dlg后缀的文件夹DataExchange里找到

    m_cbx,刚刚创建好的下拉框的变量

    value类型的变量之后用到的AddString方法都用不了

    2.AddString方法添加选项

    我们想让控件下拉框的内容选项不需要我们点击任何其他控件(比如button)的情况下就已经出现,就需要在初始化OnInitDialog中写入代码

    OnInitDialog在类视图的Dlg后缀文件夹中

     

     在return true前添加额外的初始化代码

    AddString方法 添加选项,添加的新选项会接在Data设置的选项之后

    1. // TODO: 在此添加额外的初始化代码
    2. //添加选项,添加的新选项会接在Data设置的选项之后
    3. //m_cbx.LoadStringW(TEXT("唐僧"));//value类型变量m_cbx,报错
    4. m_cbx1.AddString(TEXT("唐僧"));//控件类型变量m_cbx1
    5. m_cbx1.AddString(TEXT("孙悟空"));//控件类型变量m_cbx1
    6. m_cbx1.AddString(TEXT("猪八戒"));//控件类型变量m_cbx1
    7. m_cbx1.AddString(TEXT("沙僧"));//控件类型变量m_cbx1

    3.SetCurSel设置默认显示内容

        //初始化下拉框中的默认显示内容
        m_cbx1.SetCurSel(1);//1的位置是雪碧,所以待会儿下拉框中默认显示的是雪碧
        //默认显示孙悟空的话,可乐 雪碧 柠檬水 唐僧 孙悟空 ... 0,1,2,3,4, 第四个是孙悟空
        m_cbx1.SetCurSel(4);//显示孙悟空

    1. //初始化下拉框中的默认显示内容
    2. m_cbx1.SetCurSel(1);//1的位置是雪碧,所以待会儿下拉框中默认显示的是雪碧
    3. //默认显示孙悟空的话,可乐 雪碧 柠檬水 唐僧 孙悟空 ... 0,1,2,3,4, 第四个是孙悟空
    4. m_cbx1.SetCurSel(4);//显示孙悟空
    5. //同时设置两个默认显示内容,后来的(4孙悟空)会覆盖掉原来的(1雪碧)

    运行结果如下

    4.InsertString方法插入内容 

        //插入内容
        m_cbx1.InsertString(4, TEXT("白龙马"));

        //4是孙悟空孙悟空所在位置,表示在唐僧位置之前插入白龙马这个选项

    1. //插入内容
    2. m_cbx1.InsertString(4, TEXT("白龙马"));
    3. //4是孙悟空孙悟空所在位置,表示在唐僧位置之前插入白龙马这个选项

    运行结果

    4.DeleteString删除指定位置的内容

    1. //删除指定位置的内容
    2. m_cbx1.DeleteString(7);//把沙僧所在位置7删掉
    3. m_cbx1.DeleteString(4);//把刚刚插入的白龙马删掉

        //删除指定位置的内容
        m_cbx1.DeleteString(7);//把沙僧所在位置7删掉
        m_cbx1.DeleteString(4);//把刚刚插入的白龙马删掉

    运行结果

    5. GetLBText索引内容MessageBox弹出

        //索引1号雪碧的内容并弹出
        CString str;//创建索引的变量
        m_cbx1.GetLBText(1, str);//传入所以内容的CString变量
        MessageBox(str);//弹出索引到的内容

    1. //索引1号雪碧的内容并弹出
    2. CString str;//创建索引的变量
    3. m_cbx1.GetLBText(1, str);//传入所以内容的CString变量
    4. MessageBox(str);//弹出索引到的内容

    三、用代码监听事件

    右键类视图中Dlg后缀文件找到属性,点开闪电图标,即为事件面板

    添加OnCbnSelendcancelCombo事件

     为了不影响事件代码的运行需要把初始化中的索引并弹出代码注释掉

    //实现的功能是选到哪个选项退出时就弹出哪个选项所在位置的内容

    //比如选中柠檬水,就messagebox柠檬水(弹出内容)

    //1.先获取到当前用户选中的内容的索引(位置)

    // 2.创建一个CString类型变量作为当前索引位置的具体内容

    CString str;

    m_cbx1.GetLBText(index, str);

    //3.弹出具体内容

    MessageBox(str);

    1. void CXiaLaKuangDlg::OnCbnSelendcancelCombo()
    2. {
    3. // TODO: 在此添加控件通知处理程序代码
    4. //拿到索引位置
    5. int index=m_cbx1.GetCurSel();//int类型的返回值index接收到的就是当前位置的索引
    6. //获取索引位置的内容
    7. CString str;
    8. m_cbx1.GetLBText(index, str);//根据当前位置的索引index找到具体内容
    9. //弹出用户选中位置的具体内容
    10. MessageBox(str);
    11. }

     

     而另外一个事件SeleChange控件中选定的内容已修改,则会随着用户的选择而即时弹出内容

    1. void CXiaLaKuangDlg::OnCbnSelchangeCombo()
    2. {
    3. // TODO: 在此添加控件通知处理程序代码
    4. int index = m_cbx1.GetCurSel();//int类型的返回值index接收到的就是当前位置的索引
    5. //获取索引位置的内容
    6. CString str;
    7. m_cbx1.GetLBText(index, str);
    8. //弹出用户选中位置的具体内容
    9. MessageBox(str);
    10. }

    void CXiaLaKuangDlg::OnCbnSelchangeCombo()//不用按退出(叉掉)也可以反馈当前用户选择的索引位置的具体内容
    {
        // TODO: 在此添加控件通知处理程序代码
        int index = m_cbx1.GetCurSel();//int类型的返回值index接收到的就是当前位置的索引

        //获取索引位置的内容
        CString str;
        m_cbx1.GetLBText(index, str);

        //弹出用户选中位置的具体内容
        MessageBox(str);
    }

    四、结语

    MFC的很多事件都是根据对应事件的因为来写的比如AddString,就是添加(Add)内容(String类型内容),把鼠标放在AddString后面会提示它的具体用法

    SetCurSel,就是设置(set)当前(current)选择(selection)

    是否有返回值也会提示,返回值类型啥的(比如GetCurSel的返回值是Int)

    网上有MFC的帮助文档,有各种控件对应的函数,支持查找功能

  • 相关阅读:
    某商业银行关键系统应用场景存储选型运维实践
    pyinstaller瘦身指南
    Spring循环依赖
    【无标题】
    java中的比较器
    docker和docker-compose生产的容器,不在同一个网段,解决方式
    WPF实现超简约的MVVM事件绑定(不依赖任何东西)
    【无标题】
    shell命令合集(loading)
    想要调用淘宝开放平台API,没有申请应用怎么办?
  • 原文地址:https://blog.csdn.net/qq_58619891/article/details/128143625