• MFC控件之Combo Box


    下拉链表Combo-box Control

    常用属性:

    Sort:对添加到列表框的字符串进行自动排序。(对指定位置的元素项无效)

    Type:有三个类型

          Simple:没有下拉按钮,可以输入字符串,可以通过上下左右切换显示的item。

          Dropdown:有下拉按钮,可以输入,可以下拉选择item。

          下拉列表:有下拉按钮,不可以输入,可以下拉选择item。

    列表框常用消息映射宏
         ON_CBN_DBLCLK                                               鼠标双击
         ON_CBN_DROPDOWN                                       列表框被弹出
         ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS   在输入框失去 / 得到输入焦点时产生
         ON_CBN_SELCHANGE                                       列表框中选择的行发生改变
         ON_CBN_EDITUPDATE                                       输入框中内容被更新

    控件焦点问题

          通常要判断控件是否获得了焦点,可以用GetFocus()函数
          例如:if(GetFocus() == GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。
          但是combobox 的焦点不同,因为它是由edit和listbox两部分组成的
          所以获得焦点要用GetParent():if((GetFocus()->GetParent()) == GetDlgItem(IDC_COMBO_CF))

    常用操作:

        //下拉链表添加item
        m_combox_one.AddString(_T("zero"));
        m_combox_one.AddString(_T("one"));
        m_combox_one.AddString(_T("four"));
        m_combox_one.AddString(_T("five"));
        m_combox_one.AddString(_T("six"));
        m_combox_one.AddString(_T("seven"));
        m_combox_one.AddString(_T("eight"));
        m_combox_one.AddString(_T("nine"));
        m_combox_one.AddString(_T("ten"));
        //下拉链表指定位置插入item
        m_combox_one.InsertString(2, _T("insert two"));
        m_combox_one.InsertString(3, _T("insert three"));
    
        //设置下拉链表最大显示item个数
        int maxshowitem = 5;
        m_combox_one.SetMinVisibleItems(maxshowitem);
    
        //通过index设置需要显示的item内容
        int nshowindex = 2;
        m_combox_one.SetCurSel(nshowindex);
    
        //从下拉链表得到被选择显示的item的index
        int ngetIndex = m_combox_one.GetCurSel();
    
        //获取指定index的item的内容
        int nIndex = 0;
        CString strCBText;
        m_combox_one.GetLBText(nIndex, strCBText);
    
        //通过控件获取被选中显示的item的内容
        CString strWinText;
        GetDlgItem(IDC_COMBOX_ONE)->GetWindowTextW(strWinText);
    
        //通过item内容查找其index
        int nStartAfter = 0;
        CString itemstring = _T("four");
        int nfindstringIndex = m_combox_one.FindStringExact(nStartAfter, itemstring);
        nfindstringIndex = m_combox_one.FindString(nStartAfter, itemstring);
    
        //通过item内容,指定其显示的item,并且返回item的index
        CString itemcontain= _T("insert three");
        int nincludestringIndex = m_combox_one.SelectString(nStartAfter, itemcontain);//删除指定index位置的item
        int ndeleteindex = 5;
        m_combox_one.DeleteString(ndeleteindex);
    
        // ((CComboBox*)GetDlgItem(IDC_COMBOX_ONE))等效于m_combox_one
        //取得item数
        int iCount = ((CComboBox*)GetDlgItem(IDC_COMBOX_ONE))->GetCount();
    
        //清除目前所有项
        //m_combox_one.ResetContent();
    
        //设置或得到输入框中被选中的字符位置
        int nStartChar = 1;
        int nEndChar = 3;
        m_combox_one.SetEditSel(nStartChar, nEndChar);
        DWORD editsel=m_combox_one.GetEditSel(); //取不到结果?????
    
        //设置输入框中可输入的最大字符数。
        int nMaxChars = 20;
        m_combox_one.LimitText(nMaxChars);
        //通过item内容查找其index
        int nStartAfter = 0;
        CString itemstring = _T("four");
        int nfindstringIndex = m_combox_one.FindStringExact(nStartAfter, itemstring);
        itemstring = _T("fo");//查找前缀匹配的item
        nfindstringIndex = m_combox_one.FindString(nStartAfter, itemstring);
  • 相关阅读:
    如何导出视图中的数据
    swift中的流程控制
    PostgreSQL导出sql脚本文件
    Java分享笔记:使用缓冲流复制文件
    Java分享笔记:FileOutputStream流的write方法
    Java分享笔记:FileInputStream流的 read()方法 和 read(byte[] b)方法
    Java分享笔记:File类中常用方法的介绍
    Java分享笔记:使用entrySet方法获取Map集合中的元素
    Java分享笔记:使用keySet方法获取Map集合中的元素
    Java分享笔记:Map集合(接口)的基本方法程序演示
  • 原文地址:https://www.cnblogs.com/cteng-common/p/combo_box.html
Copyright © 2020-2023  润新知