Win32 学习笔记_组合框控件(ComboBox)

ComboBox控件

  1. 创建控件

// ComboBox控件的创建

         // 1.一直显示下拉框,编辑框可输入

         HWND hCombo1 = CreateWindowEx(0, TEXT("ComboBox"), NULL,

                   WS_VISIBLE | WS_CHILD | WS_BORDER | CBS_HASSTRINGS| CBS_SIMPLE,

                   10, 10, 200, 130, hWnd,(HMENU)1001, hInstance, 0);

         // 2. 下拉框隐藏,编辑框可输入

         HWND hCombo2 = CreateWindowEx(0, TEXT("ComboBox"), NULL,

                   WS_VISIBLE | WS_CHILD | WS_BORDER | CBS_HASSTRINGS | CBS_DROPDOWN,

                   10, 140, 200, 130, hWnd, (HMENU)1002, hInstance, 0);

         // 3. 下拉框隐藏,编辑框不可输入

         HWND hCombo3 = CreateWindowEx(0, TEXT("ComboBox"), NULL,

                   WS_VISIBLE | WS_CHILD | WS_BORDER | CBS_HASSTRINGS | CBS_DROPDOWNLIST,

                   10, 270, 200, 130, hWnd, (HMENU)1003, hInstance, 0);

// 添加测试数据到下拉列表中

         const TCHAR* tem[] = { TEXT("tem1"),TEXT("tem2"),TEXT("tem3"),TEXT("tem4") };

         for (int i = 0; i < 4; i++)

         {

                   SendMessage(hCombo1, CB_ADDSTRING, i, (LPARAM)tem[i]);

                   SendMessage(hCombo2, CB_ADDSTRING, i, (LPARAM)tem[i]);

                   SendMessage(hCombo3, CB_ADDSTRING, i, (LPARAM)tem[i]);

         }

  1. 效果展示

 

 

  1. 控件样式

样式

说明

CBS_AUTOHSCROLL

当用户在行末尾键入字符时,自动将编辑控件中的文本滚动到右侧。 如果未设置此样式,则仅允许矩形边界内的文本。

CBS_DISABLENOSCROLL

在列表框中显示一个禁用的垂直滚动条,当该框不包含足够的项目滚动时。 如果不使用此样式,则当列表框未包含足够的项时,将会隐藏滚动条。

CBS_DROPDOWN

与CBS_SIMPLE类似,除非用户选择编辑控件旁边的图标,否则不会显示列表框。

CBS_DROPDOWNLIST

与CBS_DROPDOWN类似,除了编辑控件被显示列表框中当前所选内容的静态文本项替换。

CBS_HASSTRINGS

指定所有者绘制组合框包含由字符串组成的项。 组合框维护字符串的内存和地址,以便应用程序可以使用 CB_GETLBTEXT 消息检索特定项的文本。
有关辅助功能问题,请参阅 公开Owner-Drawn组合框项

CBS_LOWERCASE

转换为选定字段和列表中的小写所有文本。

CBS_NOINTEGRALHEIGHT

指定组合框的大小正好是应用程序在创建组合框时指定的大小。 通常,系统调整组合框的大小,使其不显示部分项。

CBS_OEMCONVERT

将组合框编辑控件中输入的文本从Windows字符集转换为 OEM 字符集,然后返回到Windows字符集。 当应用程序调用 CharToOem 函数以将组合框中的Windows字符串转换为 OEM 字符时,这可确保正确转换字符。 此样式最适用于包含文件名的组合框,仅适用于使用CBS_SIMPLE或CBS_DROPDOWN样式创建的组合框。

CBS_OWNERDRAWFIXED

指定列表框的所有者负责绘制其内容,并且列表框中的项目的高度相同。 创建组合框时,所有者窗口会收到 一条WM_MEASUREITEM 消息,当组合框的视觉方面发生更改时,会收到 WM_DRAWITEM 消息。

CBS_OWNERDRAWVARIABLE

指定列表框的所有者负责绘制其内容,并且列表框中的项目高度可变。 当创建组合框时,所有者窗口在组合框中收到一 条WM_MEASUREITEM 消息,并在组合框的视觉方面发生更改时收到 WM_DRAWITEM 消息。

CBS_SIMPLE

随时显示列表框。 列表框中的当前选择显示在编辑控件中。

CBS_SORT

自动对添加到列表框的字符串进行排序。

CBS_UPPERCASE

转换为选定字段和列表中的大写所有文本。

  1. 控件消息

消息码

说明

WPARAM

LPARAM

返回值

CB_GETCOUNT

获得下拉框中项的总数

0

0

Int

CB_GETCURSEL

获得当前选中项的索引

0

0

Int

CB_SETCURSEL

设置当前选中的索引

nSelect(要选中项的索引)

0

int

CB_GETEDITSEL

获得编辑框中选中字符的起始位置和结束位置

0

0

DWORD(L为起始位置,

H为结束位置

CB_LIMITTEXT

限制文本长度

nMacChars

0

BOOL

CB_SETEDITSEL

设置编辑框中文本选中位置

0

MAKELPARAM(nStartChar,nEndChar)

BOOL

CB_GETITEMDATA

获得指定项的附加数据

nIndex

0

DWORD_PTR

CB_SETITEMDATA

设置指定项的附加数据

nIndex

(LPARAM)DWORD_PTR

Int

CB_GETLBTEXT

获得指定项的字符串

nIndex

(LPARAM)lpszText

Int

CB_GETLBTEXTLEN

获得指定项的字符长度

nIndex

0

Int

CB_SHOWDROPDOWN

显示下拉框

(BOOL)bShow

0

Void

CB_ADDSTRING

添加字符串到下拉列表中

0

(LPARAM)lpszText

Int

CB_DELETESTRING

删除指定项

nIndex

0

Int

CB_INSERTSTRING

插入字符串项

nIndex

(LPARAM)lpszText

Int

CB_RESETCONTENT

删除所有项

0

0

Void

CB_DIR

显示指定目录下的文件和文件夹

(文件属性)DDL_DRIVES,

DDL_HIDDEN,等

文件目录字符串

Int

CB_FINDSTRING

查找字符串

开始索引位置nStartAfter

lpszString,要查找的字符串

Int

CB_SELECTSTRING

查找指定字符串开头的项

nStartAfter

lpszString

Int

WM_CLEAR

清除

0

0

Void

WM_COPY

复制

0

0

Void

WM_CUT

剪贴

0

0

Void

WM_PASTE

粘贴

0

0

Void

  1. 控件通知消息

ComboBox控件发送WM_COMMAND消息到父窗口

        

消息ID

说明

CBN_CLOSEUP        

控件下拉框关闭时发送的消息

CBN_DBLCLK

双击列表框中的字符串消息

CBN_DROPDOWN

下拉框显示时消息

CBN_EDITCHANGE

编辑框内容发生改变消息

CBN_EDITUPDATE

编辑框更新显示前消息

CBN_ERSPACE

组合框无法分配内存消息

CBN_KILLFOCUS

失去焦点消息

CBN_SELCHANGE

选中项改变消息

CBN_SELENDCANCEL

CBN_SETFOCUS

获得焦点消息

WM_DRAWITEM

控件自给消息

  1. 实例

  1. 添加数据到下拉列表中

// 添加测试数据到下拉列表中

         const TCHAR* tem[] = { TEXT("tem1"),TEXT("tem2"),TEXT("tem3"),TEXT("tem4") };

         for (int i = 0; i < 4; i++)

         {

                   SendMessage(hCombo1, CB_ADDSTRING, i, (LPARAM)tem[i]);

                   SendMessage(hCombo2, CB_ADDSTRING, i, (LPARAM)tem[i]);

                   SendMessage(hCombo3, CB_ADDSTRING, i, (LPARAM)tem[i]);

         }

 

2. 选中项发生改变时获得选中项的字符串数据

// 按钮,菜单,加速键,命令消息,Edit控件通知消息

LRESULT OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)

{

         // 捕获控件id1001,并且选中项发生改变消息

         if (LOWORD(wParam) == 1001 && HIWORD(wParam) == CBN_SELCHANGE)

         {

                   HWND hCom = (HWND)lParam;     // 获得控件句柄

                   int nSel = SendMessage(hCom, CB_GETCURSEL, 0, 0); // 获得选中项的索引

                   TCHAR tem[100] = { 0 };

                   SendMessage(hCom, CB_GETLBTEXT, nSel, (LPARAM)tem);       // 获得选中项的字符串

                   MessageBox(hWnd, tem, TEXT("提示"), MB_OK);

         }       return 0;

}

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值