VC中Combo Box的使用小结
0. 初始化
CComboBox* pCComboBox = (CComboBox*)GetDlgItem(IDC_COMBO2);
pCComboBox->InsertString(0, _T("xxxx"));
pCComboBox->InsertString(1, _T("xxxxxx"));
pCComboBox->InsertString(2, _T("xxxxxxx"));
pCComboBox->SetCurSel(0);
1. 如何控制Combo Box的下拉长度.
a. 首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。
b. 属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。
2. 设置当前项或得到当前是第几项
m_ComboBox1.SetCurSel(1); //SetCurSel函数可改变标签控件当前选定的项目
m_ComboBox1.GetCurSel(); //得到当前是第几项.0是第一项,1是第二项
3. 如何使控键ComboBox不能输入只能在下拉菜单中选择?
VC6中style属性设为csDropDownList //DropList?!
VC2005中Type属性设为Drop List
4. 在程序初始化时动态添加项
CString strTemp;
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有内容
for(int i=1;i<=100;i++)
{
strTemp.Format("%d",i);
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
}
// AddString(strTemp)相当于InsertString(0, strTemp) //将行插入到指定位置
5. DeleteString( UINT nIndex )//删除指定行,
6. 插入 nsertString( int nIndex, LPCTSTR lpszItem )//将行插入到指定位置
7. 查找
FindString( int nStartAfter, LPCTSTR lpszItem )//可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。
int SelectString( int nStartAfter, LPCTSTR lpszItem )//可以选中包含指定字符串的行
8. 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。
9. 取当前内容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);
10. 取其他行内容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);
11. 获得焦点
通常要判断控件是否获得了焦点,可以用GetFocus()函数
例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框 IDC_EDIT_VALUE2内。
但是combobox 的焦点不同,因为它是由edit和listbox两部分组成的
所以获得焦点要用GetParent():if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))
//////////////////////////////////////////////////////////////
12. 如果 ComboBox 的 Sorted 属性设置为 true,
则新添加项将按字母顺序插入到列表中。否则,在列表的结尾处插入项。
13. 要立即响应选择框的改变(即选择框一改变选项,就立刻将结果传递进去)!
响应他的哪个消息比较好?
如果是只能选择的响应ON_CBN_SELCHANGE
如果是可以编辑的,那么要立刻响应编辑就是ON_CBN_EDITCHANGE
14、CBN_SELENDOK是什么作用?
This notification message is sent when the user clicks a list item,
or selects an item and then closes the list.
It indicates the user's selection is to be processed
15、介绍一下列表框几种常用的消息映射宏:
ON_CBN_DBLCLK 鼠标双击
ON_CBN_DROPDOWN 列表框被弹出
ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生
ON_CBN_SELCHANGE 列表框中选择的行发生改变
ON_CBN_EDITUPDATE 输入框中内容被更新
使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,
并且定义形式如ON_Notification( id, memberFxn )的消息映射。
如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。
16、改变ComboBox的下拉列表框宽度
一般情况下,列表框的宽度和选择框是一样宽的,为了让列表框变的更宽,可以用
m_Combobox.setdroppedwidth(int width); 来调整 他的宽度