MFC控件之Combo Box

Posted cteng-common

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

 









以上是关于MFC控件之Combo Box的主要内容,如果未能解决你的问题,请参考以下文章

MFC 获取Combo Box控件 当前选定项的序号和文本内容

VS2019 mfc combo box 调整下拉框高度(实测可行)及初始化

MFC如何选中combo box的一个内容,将这个内容显示在edit中?请高手指点?

MFC下拉框Combo Box

MFC 下拉框Combo Box

mfc如何给combo box关联byte型变量