[ windows程序设计(programing windows) ] - 控制项之组合框入门

windows的控件有不少,这一篇我来讲Combo Boxes(组合框)

首先我们来讲类型,一共有三种CBS_SIMPLE(简单)CBS_DROPDOWN(下拉式)CBS_DROPDOWNLIST(下拉列表式)
在此我就不对具体的样子进行描述了,自己试试,看一下就知道了。不过需要说一下的是CBS_SIMPLECBS_DROPDOWN类型的组合框控件展示被选中项使用edit control(编辑控件),而CBS_DROPDOWNLIST是用static control(静态控件)。
除了以上三种宏用来定义主要的外观外,还有一些宏用来定义一些细节的内容,我挑一些进行讲解,
- CBS_HASSTRINGS宏指出了一个拥有者绘制的组合框将会包含由字符串组成的项目;
- CBS_AUTOHSCROLL宏会在文字长度超过edit control显示区域的时候把文字向右滚动,如果没有设置这个宏,那么只能输入到显示区域满为止;
- CBS_LOWERCASE宏会使列表中的和显示项中的英文都变成小写;
- CBS_UPPERCASE宏会使列表中的和显示项中的英文都变成大写;
- CBS_SORT宏会自动为字串排序;
- CBS_OWNERDRAWFIXED宏指的是列表中的每一项的高度都是一样的;并在组合框创建的时候,父窗口会受到一个WM_MEASUREITEM消息,该消息的wParam参数是MEASUREITEMSTRUCT的CtlId成员,如果该值为0,此消息是由菜单发送的,如果此值为非零,那么该消息是由组合框发送的。因为这是拥有者绘制控件,所以在可是层面变化的时候,窗口会收到一个WM_DRAWITEM消息,该消息在上一篇中介绍过;
- CBS_OWNERDRAWVARIBLWE宏指的是列表中的每一项的高度就是一个变量,其实这个很好理解,就像组合框中的一条不一定占一行一样,所以它是变化的。剩下的和上面相同。

然后我们来讲一下使用。创建和button控件一样,使用CreateWindow函数来创建,lpClassName 参数应设置为WC_COMBOBOX (前提是包含了CommCtrl.h头文件),当然你也可以用TEXT(“ComboBox”);创建完了之后,控件还需要有内容,我们用SendMessage来设置其中的内容,如果你创建的不是拥有者绘制按钮,那么应该这么调用SendMessage函数SendMessage(hWndComboBox, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)lpString); wParam参数不使用,lParam参数是你要添加的文字的指针(关于拥有者绘制组合框,我在后面的文章中介绍);在添加完你需要显示的内容后,你就需要显示一个默认选项,如果不需要,你也可以不显示,SendMessage(hWndComboBox, CB_SETCURSEL, (WPARAM)SelectedIndex, (LPARAM)0); ,wParam参数是你要显示的项的索引值,lParam参数不使用;然后是删除,消息是CB_DELETESTRING ,wParam参数是你要删除的字串的索引值,lParam不使用;接下来是查找查找有两种,一种是前缀匹配CB_FINDSTRING,另一种是完全匹配CB_FINDSTRINGEXACT,它们的wParam参数都是查找的起始索引值,如果查找到列表尾部则返回起始,继续查找一直到你指定的索引值,而lParam是源字符串的指针,返回值是查找到的字串的索引值,如果查找失败,那么返回CB_ERR。

最后讲一下用户选择的处理。当用户从列表中做了一个选择的时候,一个WM_COMMAND会被发送到组合框的父窗口,这个消息的HIWORD(wParam)是值为CBN_SELCHANGE的识别码,用于与其他控件,菜单选项或快捷键区别,LOWORD(wParam) 是控件标识符,用于控件之间区别,lParam是窗口控件的句柄。所以,我们应该这样获取所选项的索引值CurSel = SendMessage((HWND)lParam, (UINT)CB_GETCURSEL, (WPARAM)0, (LPARAM)0); wParam和lParam不使用,然后用SendMessage((HWND)lParam, (UINT)CB_GETLBTEXT, (WPARAM)CurSel, (LPARAM)Item); 你获取到的字串保存在Item中,注意字串一定要开的足够大,然后你就可以进行你的功能了。多说一句,CBN_SELCHANGE 识别码处理完之后,备选项目才会显示在组合框上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值