组合框

组合框控件显示一个字符串在下拉菜单式的列表。提供一种方法来显示多个选项,同时节省空间,组合框结合了列表框和编辑框的功能。组合框控件的功能被封装在Microsoft基础类库CComboBox类。本教程演示了这个类的一些常用功能。

 如何获取列表中的选项:(Ctrl+Enter换行添加多个选项)

1.添加控件;

2.为控件添加CComboBox 类型的变量m_Combox;

3.添加CBN_SELENDOK消息响应函数,在该函数中添加以下代码:

 int nIndex = m_Combox.GetCurSel(); 
 CString strCBText;
 m_Combox.GetLBText( nIndex, strCBText);
 此时列表中被选中的选项被放入strCBText中;

4.根据需要添加代码; 


这就是你需要:

微软的Visual Studio IDE

书上的MFC,如“编程与MFC窗口”,由Jeff Prosise

1。启动Microsoft Visual Studio中。产生点击文件>新建>项目(标签),并选择了这个项目基于对话框的应用程序“的MFC AppWizard(EXE)。”类型“MyCombobox”下的“项目名称”按确定,选择“基于对话框”然后点击完成。

2。创建一个组合框,并修改其属性。单击工作区左侧的资源选项卡。展开对话框文件夹并选择IDD_MYCOMBOBOX_DIALOG。请从右侧工具箱组合框图标,把它的对话。调整下拉组合框的扩展通过点击箭头并拖累矩形。然后右键单击,选择属性,单击样式选项卡,并根据类型,选择简单。关闭属性框的组合框。

3。将项目添加到组合框。你可以在两种方式。为了在设计时添加它们,右击组合框,选择属性,单击数据选项卡,然后输入项目。要进入下一个项目,按Ctrl + Enter键。要在运行时添加它们,调用CComboBox:AddString(),添加项目到底部,或CComboBox: InsertString()中插入特定位置的项目。该项目的类型lpszString。

4。更改组合框的宽度。您可以设置显示任何项目充分显示,不管它有多长。使用CComboBox::SetDroppedWidth()成员函数。它的参数以像素为单位设置字符串宽度。

5。执行其他常用功能。选择一个项目在运行时使用CComboBox::SetCurSel()。它接受一个整数作为参数的索引。找到与CComboBox选定项的索引::GetCurSel()。数据检索使用CComboBox::GetItemData()。确定项目计数通过CComboBox::GetCount()。

6。消除从MFC组合框项目。如果字符串是已知的,你可以使用CComboBox::FINDSTRING()来确定索引,然后使用CComboBox::DeleteString()。 CComboBox::清除()删除当前的选择,如果有的话,而CComboBox::剪切()删除当前选择并将其放在剪贴板上。

7。了解消息映射通知消息,一个组合框可以发送。当组合框的列表框是封闭的,例如,ON_CBN_CLOSEUP发送。当组合框失去,因为它的边界之外点击鼠标的输入焦点时,它发送ON_CBN_KILLFOCUS。有一个为每个可能的状态变化,一个组合框可以进行消息映射。

8.动态修改下拉菜单的高度

用到了一个动态创建的组合框,当组合框中的菜单项比较多的时候,默认的组合框下拉菜单高度就显得不够了,为了能改变默认的下拉菜单高度到合适的位置,可以作如下操作:

        CRect rc;
        NewCombo.GetDroppedControlRect(&rc);  //获得屏幕坐标
        NewCombo.GetParent()->ScreenToClient(&rc);  //转换成父窗口客户区的坐标
        rc.bottom += 150;
        NewCombo.MoveWindow(&rc);  //CWnd的成员函数MoveWindow在移动子窗口时将使用父窗口的客户区坐标

      这样就改变了默认的下拉菜单高度,其中NewCombo是一个被动态创建的组合框。


关于坐标问题:

m_bnClickhere.AutoLoad(IDC_CLICKHERE, this);

CRect rect1,rect2;

CButton *pClickhere=(CButton*)GetDlgItem(IDC_CLICKHERE);

GetClientRect(&rect1);

pClickhere->GetWindowRect(&rect2);

ScreenToClient(&rect2);

pClickhere->MoveWindow(rect2.left,(rect1.Height()-rect2.Height())/2,

rect2.Width(),rect2.Height());

其中第一个参数IDC_CLICKHERE是位图按钮的资源ID,第二个参数为指向该位图按钮的父窗口的CWnd对象的指针,这里即类CBitmapButtonDlg的this指针。类CBitmapButton的成员函数AutoLoad完成以下几步工作:

(1) 将按钮与CBitmapButton对象相关联;

(2) 自动加载按钮所使用的位图,条件是这些位图资源满足步骤2中的命名约定;

(3) 自动改变控件的大小以适合所加载的位图资源。

接下来的几行代码将位图按钮在对话框中进行垂直居中。首先类CWnd的成员函数GetClientRect返回了对话框的客户区矩形,

接着,类CWnd的成员函数GetWindowRect返回了控件IDC_CLICKHERE的窗口矩形,

然后使用类CWnd的成员函数ScreenToClient将rect2由屏幕坐标转换为对话框的客户坐标,

这是因为类CWnd的成员函数MoveWindow在移动子窗口时将使用父窗口的客户区坐标,而不是使用屏幕坐标。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值