MFC中ComboBOX如何获取输入的文本内容 - 小众知识

MFC中ComboBOX如何获取输入的文本内容

2013年01月27日 14:18:05 苏内容
  标签: MFC/ComboBOX
阅读:7328

简单的获取Combobox的选中内容是很简单的:
CString  strChoosed; m_mediaCombox.GetLBText(m_mediaCombox.GetCurSel(),strChoosed);  但是如何获取输入的文本呢: m_mediaCombox.GetWindowsText(strChoosed);   不错就这么简单  转:http://my.csdn.net/ccf19881030/code/detail/25106 这是一篇不错的文章,关于Combobox 

1、获取组合框控制句柄
 
添加成员变量comboboxCtr;或者
 
CComboBoxEx*  comboboxCtr = (CComboBoxEx*)GetDlgItem(BOX_ID);
 
2、点击下拉框不显示下拉列表(问题)
 
对话框编辑器里,把列表往下拖长一点即可。
 
3、设置展开下拉列表、设置输入框只读、清空列表内容
 
CComboBoxEx*  comboboxCtr = (CComboBoxEx*)GetDlgItem(BOX_ID);
 
comboboxCtr->ShowDropDown(TRUE);
 
comboboxCtr->GetEditCtrl()->SetReadOnly(TRUE);
 
comboboxCtr->ResetContent();
 
4、添加列表内容
 
CComboBoxEx*  comboboxCtr = (CComboBoxEx*)GetDlgItem(BOX_ID);CString inputTxt("要插入的内容。");
 
COMBOBOXEXITEMW*  insertItem = new COMBOBOXEXITEM();
insertItem->iImage  = 0;   //图标索引值
insertItem->iOverlay  = 0;
 insertItem->pszText  = (LPWSTR)(LPCTSTR)inputTxt; //字符串内容
insertItem->mask  = CBEIF_IMAGE|CBEIF_TEXT; //指定列表项图片或者文本方式
comboboxCtr->InsertItem(insertItem);
 
5、调用ShowDropDown()方法后不显示光标
 
因为编辑框改变的时候把光标改变成IDC_ICON。
 
ccomboboxVar.ShowDropDown();
 
SetCursor(LoadCursor(NULL,IDC_ARROW));
 
在调用  ShowDropDown()方法后加上置光标的语句。
 
6、如何设置组合框CComboBox里面的值、获取当前所选择组合框的值?
1、设置组合框CComboBox里面的值
 
2、获取当前所选择组合框的值
MFC的话,可以用CComboBox::GetLBText()等成员函数,API可以发送CB_GETLBTEXT消息,
(1)MFC
//获取用户选择的Combox控件的值
CString  strChoosed;
m_mediaCombox.GetLBText(m_mediaCombox.GetCurSel(),strChoosed);
 
(2)API
API就是SendMessage,发CB_ADDSTRING、CB_INSERTSTRING、CB_GETLBTEXT消息。
int  nCnt = SendMessage(hCombo,CB_GETCOUNT,0,0);
for(int  i=0;i<nCnt;i++)
{
   SendMessage(hCombo,CB_GETLBTEXT,i,buf);
   ...
}
 
 
7、清空组合框内容
我做了一个组合框,并为其定义如下(通过classwizard定义的)
CComboBox   m_ctrSinger;
m_ctrSinger.ResetContent()
 
clear只是清除当前选中的内容,resetcontent()才是清空所有内容
 
CComboBox::ResetContent
 
void  ResetContent( );
 
说明:
本函数删除组合框中列表和编辑控件中的所有项。
 
请参阅:CB_RESETCONTENT
 
方法2:
CComboBox   *pmyComboBox;
 
for   (int   i=0;i   <   pmyComboBox-> GetCount();i++)
{
      pmyComboBox->  DeleteString(   i   );
}
 
 
把组合框的MSG放在此处:
 
API:
---------------------------------------------
SendMessage(HWND  hWnd,UINT Msg,WPARAM wParam,LPARAM lParam); 
 
ComboBox消息:
---------------------------------------------
CB_ADDSTRlNG  增加一项 
CB_DELETESTRING  删除指定的项 
CB_DIR  发送搜索目录的消息 
CB_FINDSTRING  搜索指定的项 
CB_FINDSTRINGEXACT  精确搜索指定的项 
CB_GETCOUNT  得到组合框中项的数目 
CB_GETCURSEL  得到当前选中项的序号 
CB_GETEDITSEL  得到编辑区域选中的文本 
CB_GETLBTEXT  得到编辑区域的文本 
CB_GETLBTEXTLEN  得到编辑区域中文本的长度 
CB_LIMITTEXT  发送限制编辑区域文本的消息 
CB_RESETCONTENT  删除所有的项 
CB_SELECTSTRING  选中指定的字符串 
CB_SETCURSEL  将光标设置在指定的位置 
CB_SETDROPPEDWIDTH  设置下拉的宽度 
CB_SETEDITSEL  选取编辑区域的文本 
CBN_CLOSEUP  关闭组合框 
CBN_DBLCLK  发送用户双击组合框中项的消息 
CBN_DROPDOWN  下拉时发送消息 
CBN_EDITCHANGE  发送编辑区域改变的消息 
CBN_EDITUPDATE  发送编辑区域改变的消息,但在更新之前发送 
CBN_ERRSPACE  发送内存不够的消息 
CBN_KILLFOCUS  当组合框失去输入焦点时发送该消息 
CBN_SETFOCUS  设置输入焦点

扩展阅读