- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
组合框(ComboBox)
控件样式
- 组合框是一个包含编辑框和列表框的控件。用户可以从下拉列表中选择一项,或者直接在编辑框中输入内容。
- Simple ComboBox:始终显示列表框。
- Dropdown ComboBox:默认只显示编辑框,并带有一个下拉按钮,点击按钮时显示列表框。
- Dropdown List ComboBox:类似于下拉组合框,但用户不能在编辑框中输入内容,只能选择列表项。
创建控件
- 要创建一个组合框控件,可以使用
CreateWindow
或CreateWindowEx
函数。
初始控件
- 添加和删除列表项
- CB_ADDSTRING:添加字符串到组合框。
- CB_DELETESTRING:删除指定位置的字符串。
- CB_RESETCONTENT:删除所有列表项。
- 获取和设置列内容
- CB_SETCURSEL:设置当前选择的列表项。
- CB_GETCURSEL:获取当前选择的列表项索引。
- CB_GETLBTEXT:获取指定索引的列表项文本。
消息处理
- CBN_SELCHANGE:用户改变了选择。
- CBN_EDITCHANGE:用户编辑了组合框中的文本。
- CBN_DROPDOWN:组合框的下拉列表被显示。
示例代码
#include <Windows.h>
#include "resource.h"
#define ID_BUTTON_PUSH1 11
#define ID_CB_DROPDOWN 1
#define ID_CB_DROPDOWNLIST 2
HINSTANCE ghInstance = 0;
LRESULT CALLBACK MainWindowProc (HWND, UINT, WPARAM, LPARAM);
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ghInstance = hInstance;
// 注册窗口
WNDCLASSEX wndclass = { 0 };
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = NULL;
wndclass.lpfnWndProc = MainWindowProc;
wndclass.cbClsExtra = NULL;
wndclass.cbWndExtra = NULL;
wndclass.hInstance = hInstance;
wndclass.hIcon = NULL;
wndclass.hCursor = NULL;
wndclass.hbrBackground = (HBRUSH)COLOR_WINDOW;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = TEXT("0xCC");
wndclass.hIconSm = NULL;
if (!RegisterClassEx(&wndclass))
{
MessageBox(NULL, TEXT("RegisterClassEx Failed"), TEXT("Error"), MB_OK);
return 1;
}
// 创建窗口
HWND hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
TEXT("0xCC"),
TEXT("CreateWindowEx"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
960,
540,
NULL,
NULL,
hInstance,
NULL
);
if (hwnd == NULL)
{
MessageBox(NULL, TEXT("CreateWindowEx Failed"), TEXT("Error"), MB_OK);
return 1;
}
// 显示窗口
ShowWindow(hwnd, SW_SHOWDEFAULT);
// 更新窗口
UpdateWindow(hwnd);
// 消息处理
MSG msg = { 0 };
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
// 窗口过程
LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
HWND hButton1 = CreateWindow(
TEXT("BUTTON"),
TEXT("BS_PUSHBUTTON1"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 250,
150, 40,
hwnd,
(HMENU)ID_BUTTON_PUSH1,
ghInstance,
NULL);
HWND hDropDown = CreateWindow(
TEXT("COMBOBOX"),
NULL,
WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
10, 10, 200, 200,
hwnd,
HMENU(ID_CB_DROPDOWN),
ghInstance,
NULL);
HWND hDropList = CreateWindow(
TEXT("COMBOBOX"),
NULL,
WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
250, 10, 200, 200,
hwnd,
HMENU(ID_CB_DROPDOWNLIST),
ghInstance,
NULL);
break;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case ID_BUTTON_PUSH1:
{
// 添加表项
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWN), CB_ADDSTRING, 0, (LPARAM)TEXT("大雁塔"));
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWN), CB_ADDSTRING, 0, (LPARAM)TEXT("小雁塔"));
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWNLIST), CB_ADDSTRING, 0, (LPARAM)TEXT("东海龙宫"));
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWNLIST), CB_ADDSTRING, 0, (LPARAM)TEXT("长安城"));
// 删除表项
CB_DELETESTRING;
// 设置表项
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWN), CB_SETCURSEL, 0, 0);
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWNLIST), CB_SETCURSEL, 0, 0);
// 清空表项
CB_RESETCONTENT;
break;
}
}
switch (HIWORD(wParam))
{
case CBN_SELCHANGE:
{
if (LOWORD(wParam) == ID_CB_DROPDOWNLIST)
{
DWORD dwIndex = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0);
TCHAR szBuffer[0xff] = { 0 };
SendMessage((HWND)lParam, CB_GETLBTEXT, dwIndex, (LPARAM)szBuffer);
MessageBox(hwnd, szBuffer, 0, 0);
break;
}
}
case CBN_DROPDOWN:
{
if (LOWORD(wParam) == ID_CB_DROPDOWNLIST)
{
// 清空数据
SendMessage((HWND)lParam, CB_RESETCONTENT, 0, 0);
// 获取数据
DWORD dwIndex = SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWN), CB_GETCURSEL, 0, 0);
TCHAR szBuffer[0xff] = { 0 };
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWN), CB_GETLBTEXT, dwIndex, (LPARAM)szBuffer);
设置数据
if (wcscmp(szBuffer, TEXT("小雁塔")) == 0)
{
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWNLIST), CB_ADDSTRING, 0, (LPARAM)TEXT("毛毛虫1"));
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWNLIST), CB_ADDSTRING, 0, (LPARAM)TEXT("毛毛虫2"));
}
else
{
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWNLIST), CB_ADDSTRING, 0, (LPARAM)TEXT("羊头怪1"));
SendMessage(GetDlgItem(hwnd, ID_CB_DROPDOWNLIST), CB_ADDSTRING, 0, (LPARAM)TEXT("羊头怪1"));
}
}
break;
}
}
break;
}
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}