现在的位置: 首页 > 综合 > 正文

控件ComBox的简单用法剖析

2018年02月08日 ⁄ 综合 ⁄ 共 4657字 ⁄ 字号 评论关闭

CComboBox

CObject
 CCmdTarget
    CWnd
       CComboBox

类CComboBox封装了Windows组合框。组合框由一个列表框和一个静态控件(或编辑控件)组成。列表框部分可以是一直显示的,也可以是隐藏的,在用户单击编辑控件边上的按钮(下拉箭头)时下拉该列表框。列表框中当前选中的项(如果有的话)显示在静态控件或编辑控件中。如果组合框带有下拉风格,则当用户在编辑框中输入列表项的开始字符时,对应项(如果有的话)中的第一个将会加亮显示。
下表列出了组合框的三种风格:

风格 列表框何时可见 静态控件还是编辑控件
Simple 总是可见 编辑控件
Drop-down 当用户单击控件边上的下拉箭头时 编辑控件
Drop-downlist 当用户单击控件边上的下拉箭头时 静态控件

可以从对话框模板中建立一个CComboBox对象,也可以直接在代码中创建。无论采用哪种方法,都要先调用CComboBox的构造函数构造一个CComboBox对象,然后调用成员函数Create创建控件并在CComboBox对象上应用它。
消息映射入口的格式如下:
ON_Notification( id, memberFxn )
其中id指定了发送通知的组合框控件的子窗口ID,而memberFxn是用于处理该通知的父成员函数的名字。
父窗口的函数原型的格式如下:
afx_msg void memberFxn( );
通知发送的次序是不能预先确定的。例如,通知CBN_SELCHANGE既可能在CBN_CLOSEUP之前也可能在它之后出现。
可能的消息映射入口如下:

· ON_CBN_CLOSEUP (Windows3.1及更高版本)组合框的列表已被关闭。对于风格为CBS_SIMPLE的组合框来说,不会发送该通知消息。
· ON_CBN_DBCLICK 用户双击了列表框中的一个字符串。只对风格为CBS_SIMPLE的组合框发送。对于风格为CBS_DROPDOWN或CBS_DROPDOWNLIST的组合框来说,不会出现双击的消息,因为一次单击就会使下拉列表隐藏或显示了。
· ON_CBN_DROPDOWN 下拉出下拉列表(变为可见)。只对风格为CBS_DROPDOWN或CBS_DROPDOWNLIST的组合框起作用。
· ON_CBN_EDITCHANGE 用户发出了一个可能改变编辑控件中文本的动作。与消息CBN_EDITUPDATE不同,本消息是在Windows刷新屏幕之后发出的。风格为CBS_DROPDOWNLIST的组合框没有该通知。
· ON_CBN_EDITUPDATE 编辑控件部分将显示变化了的文本。本通知消息在控件已经格式化了文本但没有显示时发送。风格为CBS_DROPDOWNLIST的组合框没有该通知。
· ON_CBN_ERRSPACE 不能为组合框分配足够的内存进行响应某个请求。
· ON_CBN_SELENDCANCEL (Wndows3.1及更高版本)表明用户的选择将被忽略。用户在单击了一个项之后,又单击了另外一个窗口或控件隐藏了组合框的下拉列表。此通知消息在CBN_CLOSEUP消息之前发送,以表明用户的选择将被忽略。即使没有发送CBN_CLOSEUP通知消息,也会发送CBN_SELENDCANCEL或CBN_SELENDOK消息(例如风格为CBS_SIMPLE的组合框)。
· ON_CBN_SELENDOK 用户在选择了一项以后,要么按了ENTER键,要么按了向下箭头键,从而隐藏了组合框的列表。此通知消息在CBN_CLOSEUP之前发送,表明用户的选择将不被认为是有效的。即使没有发送CBN_CLOSEUP通知消息,也会发送CBN_SELENDCANCEL或CBN_SEL-ENDOK消息(例如风格为CBS_SIMPLE的组合框)。
· ON_CBN_KILLFOCUS 组合框将失去输入焦点。
· ON_CBN_SELCHANGE 用户在列表中单击或者利用箭头键选择了另一个项,从而引起了选中项的改变。在处理此消息时,编辑控件中的文本只能通过GetLBText或者类似的某个函数存取。不能使用GetWindowText函数。
· ON_CBN_SETFOCUS 组合框获得输入焦点。

如果在对话框中创建了一个CComboBox对象,在关闭对话框时该CComboBox对象将自动撤消。
如果在另外一个窗口对象中嵌入了一个CComboBox对象,不需要显式地撤消它。如果在堆栈中创建了一个CComboBox对象,它也会被自动地撤消。如果采用new在内存堆中创建了一个CComboBox对象,则必须调用delete来撤消它。
#include <afxwin.h>

备注

怎样禁止combox控件的输入?

Combo   Box的风格中的类型选择成为Drop  List。

 

怎样设置成combox控件可以输入?

Styles 中的 Type 选择DropDown。

 

如何添加combox子项?

 CComboBox m_ComBox;
 m_ComBox.Attach(GetDlgItem(IDC_COMBO_OSDPOS));
 m_ComBox.AddString(_T("1"));

 

怎样设置combox当前选项?

 m_combox.SetCurSel(0);

 

怎样获取combox当前选项?

 int index = m_combox.GetCurSel();

 

如何添加combox子项,并设为当前选项?

 TCHAR szTemp[16], szTT[16];
 _stprintf(szTemp, _T("%d"),m_stConfigParam.TimeRAR);     
 for(int i = 0;i <m_ComBox.GetCount(); i ++)
      
  m_ComBox.GetLBText(i,szTT);
  if(lstrcmp(szTT, szTemp) ==0)
  {
   m_ComBox.SetCurSel(i);
   break;
  }
 }
 if(i >= m_ComBox.GetCount())
 {
  m_ComBox.AddString(szTemp);
  m_ComBox.SetCurSel(i);
 }

消息响应函数使用举例:

当需要的是在选中不同的项的时候,做出不同的响应

添加消息响应与函数:CBN_SELENDOK,然后在函数体内添加如下代码:

void CXXDlg::OnSelendokXXCombo()
{
 // TODO: Add your control notification handlercode here
 switch(m_AgeCombo.GetCurSel())
 {
 case 0://选择第一项
  MessageBox("你选择了第一项");
  break;
 case 1://选择第二项
  //选择第二项的响应
   MessageBox("你先择了第2项");
  break;
 case 2://选择第二项
  //选择第二项的响应
  MessageBox("你先择了第3项");
  break; 

  ………
 default:
  break;
 }

}
应用2:

在vc的combox里想设置成1-100的数字可是初始化后就是1 10 11 ....19 20 20 3 30...这种形式的啊
m_age1.ResetContent();
 int j;
 CString str;
 for(j=1;j<=100;j++)
 {
         str.Format("%d",j);
  m_age1.AddString(str);
 } 
只需要把控件属性设置中里面系统自动选择的分类选项取消就可以正常显示了。
常用的成员函数列表:
通用操作 
GetCount 取得组合框的列表框中项的个数
GetCurSel 取得组合框的列表框中当前选中项(如果有的话)的下标
SetCurSel 在组合框的列表框中选择一个字符串
GetEditSel 取得组合框的编辑控件中当前选项的起止字符位置
SetEditSel 选中组合框的编辑控件中的字符
SetItemData 设置组合框中指定项的32位值
SetItemDataPtr 把组合框中指定项的32位值设置成一个指定的void型指针
GetItemData 检索应用为组合框的项提供的32位值
GetItemDataPtr 检索应用为组合框的项提供的32位值,返回一个void型指针
GetTopIndex 返回组合框中列表框的第一个可见项的下标
SetTopIndex 让组合框的列表框显示指定下标所在的项
SetHorizontalExtent 设置组合框中列表框的水平宽度(以像素为单位),如果列表超过该宽度,将需要用滚动条
GetHorizontalExtent 返回组合框中列表框的水平宽度(以像素为单位)
SetDroppedWidth 设置组合框中下拉列表允许的最小宽度
GetDroppedWidth 返回组合框中下拉列表允许的最小宽度
Clear 删除编辑控件中的当前选择(如果有的话)
Copy 以CF_TEXT格式拷贝编辑控件中的当前选择(如果有的话)到剪贴板
Cut 删除编辑控件中的选择项(如果有的话),并把删除的内容以CF_TEXT格式拷贝到剪贴板
Paste 在编辑控件中的当前位置粘贴剪贴板中的内容。仅当剪贴板中的数据是CF_TEXT格式的才会真正插入
LimitText 设置用户可以在组合框的编辑控件中输入的文本的最大长度
SetItemHeight 设置组合宽中列表框的项的高度或编辑控件(或静态控件)中文本的高度
GetItemHeight 取得组合框中列表项的高度
GetLBText 从组合框的列表框中取得一个字符串
GetLBTextLen 取得组合框的列表框中某个字符串的长度
ShowDropDown 显示或者隐藏风格为CBS_DROPDOWN或CBS_DROPDOWNLIST的组合框的列表框
GetDroppedControlRect 取得组合框中可见(已经下拉)的列表框的屏幕坐标
GetDroppedState 检测组合框的列表框是否可见(是否已经下拉)
SetExtendedUI 选择风格为CBS_DROPDOWN或CBS_DROPDOWNLIST的组合框中的列表框的缺省用户接口或扩展用户接口
GetExtendedUI 检测组合框的用户接口是缺省的还是扩展的
GetLocale 取得组合框的定位标记
SetLocale 设置组合框的定位标记
字符串操作 
AddString 在组合框的列表框的列表末尾添加一个字符串,或在具有CBS_SORT风格的的列表框中按次序所在的位置插入一个字符串
DeleteString 删除组合框中的列表框中的一个字符串
InsertString 在组合框的列表框中插入一个字符串
ResetContent 删除组合框的列表框和编辑控件中的所有项
Dir 在组合框的列表框中添加文件名的列表
FindString 在组合框的列表框中查找具有指定前缀的第一个字符串
FindStringExact 在组合框的列表框中查找具有与指定字符串完全匹配的第一个字符串
SelectString 在组合框的列表框中查找字符串,找到后选中它,并把它拷贝到编辑控件中
可覆盖的函数 
DrawItem 当自定义的组合框的某个可视特性改变时,由主程序调用
MeasureItem 当创建一个自定义的组合框时,由主程序调用以检测组合框的维数
CompareItem 由主程序调用以检测在有序的自定义组合框中新项所在的位置
DeleteItem 从自定义的组合框中删除一个列表项时,由主程序调用

抱歉!评论已关闭.