Windows图形界面(GUI)-SDK-C/C++ - 组合框(ComboBox)

目录

组合框(ComboBox)

控件样式

创建控件

初始控件

消息处理

示例代码


组合框(ComboBox)

控件样式

  • 组合框是一个包含编辑框和列表框的控件。用户可以从下拉列表中选择一项,或者直接在编辑框中输入内容。
  • Simple ComboBox:始终显示列表框。
  • Dropdown ComboBox:默认只显示编辑框,并带有一个下拉按钮,点击按钮时显示列表框。
  • Dropdown List ComboBox:类似于下拉组合框,但用户不能在编辑框中输入内容,只能选择列表项。
创建控件

  • 要创建一个组合框控件,可以使用CreateWindowCreateWindowEx函数。
初始控件

  • 添加和删除列表项
    • 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);
	}

}

相关推荐

  1. Windows图形界面(GUI)-SDK-C/C++ - 组合(ComboBox)

    2024-07-15 14:30:05       21 阅读
  2. Windows图形界面(GUI)-SDK-C/C++ - 编辑(edit)

    2024-07-15 14:30:05       21 阅读
  3. Windows图形界面(GUI)-SDK-C/C++ - 列表(List)

    2024-07-15 14:30:05       24 阅读
  4. Windows图形界面(GUI)-SDK-C/C++ - 应用程序结构

    2024-07-15 14:30:05       29 阅读
  5. Windows图形界面(GUI)-SDK-C/C++ - 按钮(button)

    2024-07-15 14:30:05       22 阅读
  6. Windows图形界面(GUI)-SDK-C/C++ - 窗口类注册和管理

    2024-07-15 14:30:05       18 阅读
  7. Windows图形界面(GUI)-DLG-C/C++ - 树形视图(TreeView)

    2024-07-15 14:30:05       22 阅读
  8. Windows图形界面(GUI)-DLG-C/C++ - 状态栏(StatusBar)

    2024-07-15 14:30:05       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 14:30:05       51 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 14:30:05       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 14:30:05       44 阅读
  4. Python语言-面向对象

    2024-07-15 14:30:05       55 阅读

热门阅读

  1. vue3实现一个接球小游戏

    2024-07-15 14:30:05       14 阅读
  2. 安装 MySQL与修改配置流程

    2024-07-15 14:30:05       17 阅读
  3. html dialog不显示边框

    2024-07-15 14:30:05       21 阅读
  4. conda

    2024-07-15 14:30:05       21 阅读
  5. 代码随想录算法训练营第三十二天

    2024-07-15 14:30:05       21 阅读
  6. 【并发编程】CPU & IO 密集型

    2024-07-15 14:30:05       14 阅读
  7. python中逻辑运算符and 和 or 的优先级问题。

    2024-07-15 14:30:05       15 阅读
  8. Android 中处理 RGB24 格式数据

    2024-07-15 14:30:05       21 阅读