2010-03-04 20:20:09 阅读15 评论0 字号:大中小
vc6.0 combo box控件
ComboBox
由于接触VC时间不长,对VC中控件的用法也不是很了解,用到时在网上查了很多,现总结如下:
1、改变下拉框大小:先点向下的箭头,就可以调整下拉框大小
2、如果 ComboBox 的 Sort 属性设置为 true,
则新添加项将按字母顺序插入到列表中。
否则,在列表的结尾处插入项。
3、要立即响应选择框的改变(即选择框一改变选项,就立刻将结果传递进去)!
响应他的哪个消息比较好?
如果是只能选择的响应ON_CBN_SELCHANGE
如果是可以编辑的,那么要立刻响应编辑就是ON_CBN_EDITCHANGE
4、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
5、介绍一下列表框几种常用的消息映射宏:
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会自动列出相关的消息,并能自动产生消息映射代码。
6、改变ComboBox的下拉列表框宽度
一般情况下,列表框的宽度和选择框是一样宽的,为了让列表框变的更宽,可以用
m_Combobox.setdroppedwidth(int width); 来调整 他的宽度
7、如何使控键ComboBox不能输入只能在下拉菜单中选择?
VC6中style属性设为csDropDownList
VC2005中Type属性设为Drop List
8、设置当前项或得到当前是第几项
m_ComboBox1.SetCurSel(N); //SetCurSel函数可改变标签控件当前选定的项目
//这个N可以是-1,表示无选择,0表示{dy}项,1表示第二项。。
m_ComboBox1.GetCurSel(); //得到当前是第几项.0是{dy}项,1是第二项
添加控件时,鼠标点击的窗口必须足够大,这样才能显示您的list
1.为combo box添加选项,在编辑状态下选combo box控件的属性,选Da
2.消息响应命令
(1)选中:
int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//当前选中的行。
(2)设置初始化显示内容,在On
//////////////////////////////////////////////////////////////////////////
//初始化,,从0开始
((CComboBox*)GetDlgItem(IDC_COMBO4))->SetCurSel(2); //设置第2行内容为显示的内容。
//////////////////////////////////////////////////////////////////////////
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//设置第n行内容为显示的内容。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
CString strTemp;
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//xxID为IDC_COMBO_CF现有所有内容
for(int i=1;i<=100;i++)
{
strTemp.Format("%d",i);
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp); //为控件添加初始化数据
}
(3)删除
DeleteString( UINT nIndex )//删除指定行,
(4)插入
InsertString( int nIndex, LPCTSTR lpszItem )//将行插入到指定位置
(5)查找
FindString( int nStartAfter, LPCTSTR lpszItem )//可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。
int SelectString( int nStartAfter, LPCTSTR lpszItem )//可以选中包含指定字符串的行
///////////////////////////////////////////////////////////////////////////////////
控制Combo Box的下拉长度
1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。
2,二、属性里有个 No integral height 钩选项,表示{zd0}长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。
取得Combo Box框内容
(1)取当前内容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);//将获取的值存放到CString类型变量strTemp中。
如果定义了关联的变量,例如m_combo,可以直接获取:m_combo->GetWindowText(strTemp);
(2)取其他行内容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp); //其中n为从0开始的索引值
获取当前选择的行数
例如:((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel()返回的是当前选中值的行数,是整型。
或者:UINT m_row = m_combo->GetCurSel()
获得焦点
通常要判断控件是否获得了焦点,可以用GetFocus()函数
例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。
但是combobox 的焦点不同,因为它是由edit和listbox两部分组成的
所以获得焦点要用GetParent():if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))