ComboBox⽤法⼤全
在响应ON_CBN_SELCHANGE的函数中,我先UpdateData(TRUE)
然后取CComboBox的值,为什么取到的总是上⼀次选择的字符串!
在CComboBox⾥有这个属性Drop    List设之后即可
使⽤:初始化变量:
m_CtrlCombo.InsertString( 3, "管理112" );
使⽤函数调⽤:
((CComboBox*)GetDlgItem(IDC_COMBO1))->InsertString( 3, "管理112" );
CComboBox控件⼜称作组合框控件,其有三种形态可供选择,1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down list).
CComboBox控件的常⽤设置属性说明:
type属性:⾥⾯⼀共有三个选项.就是其三种形式, 我们常⽤的是后两种形态,其区别就是Dropdown的编辑区为可编辑控件,⽽droplist 为静态控件.
Data属性:当程序初始化的时候,下拉列表将显⽰其属性⾥⾯的内容,内容⽤分号分隔.其属性只⽀持后2中形式,
Sort 属性:对添加到下拉列表框中的数据⾃动进⾏排序,如果你不想他改变你的显⽰序列,把他设置成False.
控件是⼀个窗⼝.其基类是为CWnd.所以CComboBox也可以使⽤CWnd的⼀些函数,它⾃⼰的函数有30⼏种.我写了⼀个⽰范程序,演⽰了⼀些常⽤的函数,你可以参考其代码看到其功能.
注:m_cbox 为CComboBox控件的关联变量,m_end为EDIT控件的关联变量
1.GetCount() 函数:⽤以获得列表框中的选项数⽬.
int i=ComboBoxGet_Count(hwnd,Combo1);
2.GetCurSel() 函数:⽤以得到⽤户选中下拉列表框中数据的索引值.返回的值是从0开始的,如果没有选择任何选项将会返回CB_ERR
int CurSel= ComboBox_GetCurSel(hwndCombo1);
3.DeleteString():删除
控件的使用
ComboBox_DeleteString(hwndCombo,CurSel);
4.AddString() 添加
ComboBox_AddString(hwndCombo,CurSel);
3.SetCurSel函数:选取列表框中的⼀个选项,索引从0开始,-1为什么都不选.当你需要把列表框中已经选取的内容清空时就可以使⽤这个函数;
if(m_i<3) m_cbox.SetCurSel (m_i++);//m_i为int型变量 ⽤以计数
else {
m_cbox.SetCurSel (-1);
m_i=0;
}
4.SetEditSel函数:设置编辑区中蓝⾊选中字段的长度,BOOL SetEditSel( intnStartChar,
int nEndChar ); nStartChar是起始的位置,当设置为-1时为不选择任何字段,nEndChar是结束位置.还有⼀个对应的函数GetEditSel是取得其位置,在此不详解.
m_cbox.SetEditSel (3,5);//在编辑框中打⼊⼀串数字在按此按钮就能看到效果
//其作⽤就是选中第3到第5个字符作为热点
5.Clear() Cut() Paste() Copy() 这四个函数我放在⼀起说,因为他们都是针对编辑框中选定的⽂字进⾏编辑的函数,很多初学者很不明⽩这4个函数,使⽤这些函数没有作⽤,其实不然,这些函数对于在编辑框中的内容不进⾏处理,他真正处理的是你⽤⿏标选中的内容,对于Clear()函数很多书中解释都是有误的,很多书中对他的解释是清除当前选中的⽂本,我认为这样的解释是有歧异的,真正的解释是把你刚选中的⽂本释放掉,也就是不选,⽽不是把选中的删除,真正的删除选中的⽂本的函数是Cut(),Copy()是复制选中的⽂本,Paste()是粘贴到光标处.其演⽰就不写在程序中,有兴趣的朋友可以⾃⼰试试.
6.LimitText()函数.其作⽤是限制在编辑框中键⼊的⽂本长度,BOOL LimitText(int nMaxChars); 当nMaxChars为0时,不是不能输⼊,⽽是长度最⼤化为65535字节
7.GetLBText()函数.其原型为void GetLBText( int nIndex, CString&rString ).nIndex为列表框中数据的索引值,rString 为字符串,其作⽤就是把索引号为nIndex的数据放到rString变量中.与其对应的GetLBTextLen(intnIndex)函数就是得到索引号为nIndex中数据的长度              m_cbox.GetLBText (2,m_end); // GetLBText按钮
UpdateData(0);
CString str;  //GetLBTextLen按钮
int i=m_cbox.GetLBTextLen (2);
str.Format ("%d",i);
m_end=str;
UpdateData(FALSE);
8.AddString()  DeleteString()  InsertString()  ResetContent() 四个函数放在⼀起,他们都是针对下拉列表框的处理函数, AddString(LPCTSTRlpszString) 是在列表框的尾巴添加⼀条数据,参数为字符串. DeleteString(UINTnIndex)为删除指定索引为nIndex的数据. InsertString(intnIndex, LPCTSTRlpszStrin
g)在索引nIndex处插⼊IpszString的内容. ResetContent()是清除列表框中所有的内容.
9.SetDroppedWidth(UINTnWidth) 函数.⽤于设定下拉列表框的最⼩宽度,当下拉列表框中的数据很长不能完全显⽰时,我们可以使⽤这个函数把列表框的宽度设置的⼤些.同样GetDroppedWidth()是返回列表框的宽度.
以下为总结了各⼤论坛中对CCombBox控件使⽤的问题.并给出了正解.
1.关于CComboBox在对话框中没有下拉项⽬的问题
答: 资源编辑器中对话框中CComboBox组件的垂直范围拉⼤了下,就看见字体了,看到那个向下的⿊箭头了吗,点他下拉,嘿嘿就这么简单.
2.请问怎样能让CCombobox记住⽤户的输⼊.下次使⽤时还有
答: 要记住⽤户的输⼊必须⽤到⽂件读写,或者把内容添加到注册表中,我会在以后给出解决办法.
3. CCOMBOBOX如何使它只读,不能编辑
答: 看了本⽂的介绍也许你现在知道了, CCOMBOBOX有三种类型的,选择你需要的吧!
4. 我要让界⾯⼀显⽰,就能在Combo框中显⽰默认的数据
答: 你要在OnInitDialog⾥⾯加上我上⾯所提到的SetCurSel()函数就⾏了.
5.  如何把选好的内容赋给变量
答: 先给CCOMBOBOX设置⼀个CString关联变量,再添加事件处理函数CBN_ Selchange.使⽤UpdateData(FALSE)就⾏了.
6. 在CComboBox组合框中,条⽬的对齐⽅式是左对齐,能设置为对中或者右对齐吗?
答: 没有直接的⽅法,你必须⾃⼰对齐, ⽐如最⼤长度是10
int i;
String.Format("%10d", i);
CComboBox->AddString
由于接触VC时间不长,对VC中控件的⽤法也不是很了解,⽤到时在⽹上查了很多,现总结如下:
1、改变下拉框⼤⼩:先点向下的箭头,就可以调整下拉框⼤⼩
2、如果 ComboBox 的 Sorted 属性设置为 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表⽰第⼀项,1表⽰第⼆项。。
m_ComboBox1.GetCurSel();    //得到当前是第⼏项.0是第⼀项,1是第⼆项

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。