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

server/2024/10/18 13:54:44/
  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> 链接点击跳转博客主页

目录

组合框(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			2HINSTANCE 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);}}


http://www.ppmy.cn/server/59735.html

相关文章

SwiftUI 6.0(iOS 18.0)滚动视图新增的滚动阶段(Scroll Phase)监听功能趣谈

何曾几时&#xff0c;在 SwiftUI 开发中的秃头小码农们迫切需要一种能够读取当前滚动状态的方法。 在过去&#xff0c;他们往往需要借助于 UIKit 的神秘力量。不过这一切在 SwiftUI 6.0 中已成“沧海桑田”。 在本篇博文中&#xff0c;您将学到如下内容&#xff1a; 1. Scroll…

极速目标检测:算法加速的策略与实践

标题&#xff1a;极速目标检测&#xff1a;算法加速的策略与实践 目标检测算法在计算机视觉任务中扮演着重要角色&#xff0c;但其计算成本往往较高。优化目标检测算法的速度&#xff0c;不仅可以提升效率&#xff0c;还能使算法适用于实时系统。本文将深入探讨如何优化目标检…

C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,字符数组常用函数】

目录 C语言中的数组&#xff1a;掌握数据的有序集合【一维数组&#xff0c;二维数组&#xff0c;字符串数组】一维数组一维数组的创建数组的七种初始化完全初始化&#xff1a;部分初始化&#xff1a;字符数组的初始化&#xff1a;自动初始化为0&#xff1a;使用memset函数初始化…

数据结构 —— 最小生成树

数据结构 —— 最小生成树 什么是最小生成树Kruskal算法Prim算法 今天我们来看一下最小生成树&#xff1a; 我们之前学习的遍历算法并没有考虑权值&#xff0c;仅仅就是遍历结点&#xff1a; 今天的最小生成树要满足几个条件&#xff1a; 考虑权值所有结点联通权值之和最小无环…

计算机网络之无线局域网

1.无线局域网工作方式 工作方式&#xff1a;每台PC机上有一个无线收发机&#xff08;无线网卡&#xff09;&#xff0c; 它能够向网络上的其他PC机发送和接受无线电信号。 与有线以太网相似&#xff0c;无线局域网也是打包方式发送数据的。每块网卡都有一个永久的、唯一的ID号…

每天一个数据分析题(四百二十四)- 单因素方差分析

关于单因素方差分析&#xff0c;下列说法不正确的是 A. 组间平方和只包含系统误差 B. 组内平方和只包含随机误差 C. 如果组间均方远大于组内均方&#xff0c;那么就说明不同水平之间均值存在着显著差异 D. 如果组间均方远大于组内均方&#xff0c;那么就说明分类变量对于数…

拆分pdf文件最简单的方法,pdf怎么拆成一页一张

在数字化的时代&#xff0c;pdf文件已经成为我们日常办公、学习不可或缺的文档格式。然而&#xff0c;有时候我们可能需要对一个大的pdf文件进行拆分&#xff0c;以方便管理和分享。那么&#xff0c;如何将一个pdf文件拆分成多个pdf呢&#xff1f;本文将为你推荐一种好用的拆分…

超级好用的java http请求工具

kong-http 基于okhttp封装的轻量级http客户端 使用方式 Maven <dependency><groupId>io.github.kongweiguang</groupId><artifactId>kong-http</artifactId><version>0.1</version> </dependency>Gradle implementation …