Windows圖形界面(GUI)-SDK-C/C++ - 列表框(List)

  • 公開視頻 ->?鏈接點擊跳轉公開課程
  • 博客首頁 ->?鏈接點擊跳轉博客主頁

目錄

列表框(List)

控件樣式

創建控件

初始控件

消息處理

示例代碼


列表框(List)

控件樣式
  • 列表框(ListBox)是Windows圖形界面開發中常用的控件,允許用戶從一個列表中選擇一項或多項內容。列表框可以是單選、多選或擴展多選類型。
創建控件
  • 創建一個列表框控件,可以使用CreateWindowCreateWindowEx函數。
初始控件
  • 添加和刪除列表項
    • LB_ADDSTRING:添加字符串到列表框。
    • LB_INSERTSTRING:在指定位置插入字符串。
    • LB_DELETESTRING:刪除指定位置的字符串。
    • LB_RESETCONTENT:刪除所有列表項。
  • 獲取和設置選中項
    • LB_GETCURSEL:獲取單選列表框的當前選擇項索引。
    • LB_SETCURSEL:設置單選列表框的當前選擇項。
    • LB_GETSELCOUNT:獲取多選列表框中選中的項數。
    • LB_GETSELITEMS:獲取多選列表框中選中的項索引。
    • LB_SETSEL:設置指定項為選中狀態。
  • 獲取和設置項文本
    • LB_GETTEXT:獲取指定索引的列表項文本。
    • LB_GETTEXTLEN:獲取指定索引的列表項文本長度。
消息處理
  • LBN_SELCHANGE:列表框的選擇發生改變。
  • LBN_DBLCLK:列表框中的項被雙擊。
示例代碼
// 獲取單選列表框的當前選擇項索引
int index = SendMessage(hListBoxSingle, LB_GETCURSEL, 0, 0);// 設置單選列表框的當前選擇項為第一個項
SendMessage(hListBoxSingle, LB_SETCURSEL, 0, 0);// 獲取多選列表框中選中的項數
int count = SendMessage(hListBoxMulti, LB_GETSELCOUNT, 0, 0);// 獲取多選列表框中選中的項索引
int* selections = (int*)malloc(count * sizeof(int));
SendMessage(hListBoxMulti, LB_GETSELITEMS, (WPARAM)count, (LPARAM)selections);// 獲取列表項文本長度
int textLength = SendMessage(hListBoxSingle, LB_GETTEXTLEN, index, 0);// 獲取列表項文本
TCHAR szItemText[256];
SendMessage(hListBoxSingle, LB_GETTEXT, index, (LPARAM)szItemText);#include <Windows.h>
#include "resource.h"#define ID_BUTTON_PUSH1		11
#define ID_LB_LIST1			1
#define ID_LB_LIST2			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, 120,200, 40,hwnd,(HMENU)ID_BUTTON_PUSH1,ghInstance,NULL);HWND hListBoxSingle = CreateWindow(TEXT("LISTBOX"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_STANDARD,10, 10, 200, 100,hwnd,(HMENU)ID_LB_LIST1,ghInstance,NULL);HWND hListBoxMulpit = CreateWindow(TEXT("LISTBOX"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_STANDARD | LBS_MULTIPLESEL,220, 10, 200, 100,hwnd,(HMENU)ID_LB_LIST2,ghInstance,NULL);// 初始控件// 添加表項SendMessage(hListBoxSingle, LB_ADDSTRING, 0, (LPARAM)TEXT("單選列表1"));SendMessage(hListBoxSingle, LB_ADDSTRING, 0, (LPARAM)TEXT("單選列表2"));SendMessage(hListBoxSingle, LB_ADDSTRING, 0, (LPARAM)TEXT("單選列表3"));SendMessage(hListBoxMulpit, LB_ADDSTRING, 0, (LPARAM)TEXT("多選列表1"));SendMessage(hListBoxMulpit, LB_ADDSTRING, 0, (LPARAM)TEXT("多選列表2"));SendMessage(hListBoxMulpit, LB_ADDSTRING, 0, (LPARAM)TEXT("多選列表3"));// 插入表項LB_INSERTSTRING;// 刪除表項LB_DELETESTRING;// 清空表項LB_RESETCONTENT;break;}case WM_COMMAND:{switch (HIWORD(wParam)){case LBN_SELCHANGE:// 選中表項break;case LBN_DBLCLK:// 表項雙擊break;}switch (LOWORD(wParam)){case ID_BUTTON_PUSH1:// 獲取索引DWORD dwIndex = SendMessage(GetDlgItem(hwnd, ID_LB_LIST1), LB_GETSEL, 0, 0);OutputDebugString(L"1");// 多選處理LB_GETSELITEMS;// 獲取文本LB_GETTEXT;break;	}switch (HIWORD(wParam)){case LBN_SELCHANGE:// 處理列表框選擇改變事件if (LOWORD(wParam) == ID_LISTBOX_SINGLE){int selIndex = SendMessage((HWND)lParam, LB_GETCURSEL, 0, 0);TCHAR selText[256];SendMessage((HWND)lParam, LB_GETTEXT, selIndex, (LPARAM)selText);MessageBox(hwnd, selText, TEXT("Selection Changed"), MB_OK);}break;case LBN_DBLCLK:// 處理列表框雙擊事件if (LOWORD(wParam) == ID_LISTBOX_SINGLE){int selIndex = SendMessage((HWND)lParam, LB_GETCURSEL, 0, 0);TCHAR selText[256];SendMessage((HWND)lParam, LB_GETTEXT, selIndex, (LPARAM)selText);MessageBox(hwnd, selText, TEXT("Item Double Clicked"), MB_OK);}break;}break;}case WM_DESTROY:{PostQuitMessage(0);break;}default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44512.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44512.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44512.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

力扣第230題“二叉搜索樹中第K小的元素”

在本篇文章中&#xff0c;我們將詳細解讀力扣第230題“二叉搜索樹中第K小的元素”。通過學習本篇文章&#xff0c;讀者將掌握如何使用中序遍歷來找到二叉搜索樹中的第K小的元素&#xff0c;并了解相關的復雜度分析和模擬面試問答。每種方法都將配以詳細的解釋&#xff0c;以便于…

OpenAI終止對中國提供API服務,對國內AI市場產生重大沖擊?

6月25日&#xff0c;OpenAI突然宣布終止向包括中國在內的國家地區提供API服務&#xff0c;本月9日這一政策已經正式生效了&#xff01; 有人說&#xff0c;這個事件給中國AI行業帶來很大沖擊&#xff01;是這樣嗎&#xff1f;在展開討論前&#xff0c;我們先來看看什么是API服務…

會話固定攻擊

會話固定攻擊&#xff08;Session Fixation Attack&#xff09;是一種網絡攻擊&#xff0c;攻擊者試圖誘騙受害者使用攻擊者指定的會話ID&#xff0c;以便在受害者登錄后&#xff0c;攻擊者能夠竊取受害者的會話并冒充受害者進行操作。下面是一個形象的例子來解釋會話固定攻擊&…

8080端口映射外網不成功的原因

最近因為需要將群暉nas的8080端口映射到外網&#xff0c;但是路由器已經成功設置&#xff0c;群暉nas上對應端口的服務也已經部署好&#xff0c;可是如論如何也從外網訪問不到群暉服務器上&#xff0c;但是同樣是5000端口&#xff0c;群暉的外網管理端口就可以&#xff0c;最后…

在linux x86服務器安裝jdk

安裝JDK&#xff08;Java Development Kit&#xff09;在Linux x86 服務器上可以按照以下步驟進行操作。以下步驟假設你有root權限或者sudo權限。 1. 下載JDK安裝包 首先&#xff0c;你需要從Oracle官網或者OpenJDK官網下載JDK的安裝包。可以選擇對應的版本&#xff0c;比如J…

jmeter-beanshell學習8-for循環

一個稍微有點難度的東西 要把響應結果的所有名字都取出來&#xff0c;然后怎么處理看自己需求。比如找某個人是不是在這里&#xff0c;或者把所有人都寫進一個文檔&#xff0c;我就不編場景了 第一步想要取出所有名字&#xff0c;還得靠萬能的正則表達式提取器&#xff0c;jso…

【開源 Mac 工具推薦之 1】gibMacOS:方便快捷的 macOS 完整包下載 Shell 工具

簡介 gibMacOS 是由 GitHub 開發者 corpnewt 編寫的一款 Shell 工具。它采用 Python 編程語言&#xff0c;可以讓用戶打開后在純文本頁面中輕松選擇并下載來源于 Apple 官方的 macOS 完整安裝包。 Repo 地址&#xff1a;https://github.com/corpnewt/gibMacOS &#xff08;其…

【簡歷】某電子科技大學:前端實習簡歷指導,面試通過率低

注&#xff1a;為保證用戶信息安全&#xff0c;姓名和學校等信息已經進行同層次變更&#xff0c;內容部分細節也進行了部分隱藏 簡歷說明 這是一份一本某電子科技大學的同學簡歷&#xff0c;投遞的職位就是我們前端&#xff0c;但是因為學校是一本&#xff0c;我們說主要主體在…

路由協議的優先級,以及管理距離 AD 和 metric 的區別

路由協議的優先級&#xff08;Preference&#xff0c;即管理距離 Administrative Distance &#xff09;一般為一個 0 到 255 之間的數字&#xff0c;數字越大則優先級越低。表一是通常情況下各路由協議的優先級規定&#xff1a; 表一&#xff1a;一般路由協議優先級 路由協議…

Mybatis-plus 集成 PostgreSQL 數據庫自增序列問題記錄

1.創建序列并綁定id CREATE SEQUENCE biz_factory_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;"id" int4 NOT NULL DEFAULT nextval(sys_user_seq::regclass), 2.實體設置KeySequence和TableId注解 注意IdType.INPUT 和 KeySequence(value …

debian 12 PXE Server 批量部署系統

pxe server 前言 PXE&#xff08;Preboot eXecution Environment&#xff0c;預啟動執行環境&#xff09;是一種網絡啟動協議&#xff0c;允許計算機通過網絡啟動而不是使用本地硬盤。PXE服務器是實現這一功能的服務器&#xff0c;它提供了啟動鏡像和引導加載程序&#xff0c;…

STM32的TIM1之PWM互補輸出_死區時間和剎車配置

STM32的TIM1之PWM互補輸出_死區時間和剎車配置 1、定時器1的PWM輸出通道 STM32高級定時器TIM1在用作PWM互補輸出時&#xff0c;共有4個輸出通道&#xff0c;其中有3個是互補輸出通道&#xff0c;如下&#xff1a; 通道1&#xff1a;TIM1_CH1對應PA8引腳,TIM1_CH1N對應PB13引…

LDAPWordlistHarvester:基于LDAP數據的字典生成工具

關于LDAPWordlistHarvester LDAPWordlistHarvester是一款功能強大的字典列表生成工具&#xff0c;該工具可以根據LDAP中的詳細信息生成字典列表文件&#xff0c;廣大研究人員隨后可以利用生成的字典文件測試目標域賬號的非隨機密碼安全性。 工具特征 1、支持根據LDAP中的詳細信…

STM32F103RC使用HAL庫配置USART進行數據收發

目錄 STM32F103RC使用HAL庫配置USART進行數據收發&#xff08;代碼模塊&#xff09; 一、USART初始化 二、USART使用的GPIO初始化 三、USART的接收中斷配置 四、USART的數據發送 五、補充 STM32F103RC使用HAL庫配置USART進行數據收發&#xff08;代碼模塊&#xff09; 一…

JavaDS —— 棧 Stack 和 隊列 Queue

棧的概念 棧是一種先進后出的線性表&#xff0c;只允許在固定的一端進行插入和刪除操作。 進行插入和刪除操作的一端被稱為棧頂&#xff0c;另一端被稱為棧底 棧的插入操作叫做進棧/壓棧/入棧 棧的刪除操作叫做出棧 現實生活中棧的例子&#xff1a; 棧的模擬實現 下面是Jav…

windows USB 設備驅動程序開發-總線接口查詢

總線接口的查詢 USB 客戶端驅動程序可以獲取對USB總線驅動程序接口的引用&#xff0c;并使用它來訪問總線驅動程序例程&#xff0c;而不是使用 I/O 請求數據包 (IRP) 機制。 使用總線驅動程序接口為客戶端驅動程序提供了幾個優勢&#xff1a; 它可以使用接口的服務&#xff…

對接企業微信API自建應用配置企業可信IP

前言 為了實現系統調用團隊會議功能&#xff0c;組織發起企業微信會議&#xff0c;于是需要和企業微信做API對接。對接過程很難受&#xff0c;文檔不清晰、沒有SDK、沒有技術支持甚至文檔報文和實際接口報文都不匹配&#xff0c;只能說企業微信的API是從業以來見過的最難用的AP…

[Spring] Spring Web MVC基礎理論

&#x1f338;個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;?熱門專欄: &#x1f9ca; Java基本語法(97平均質量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection與…

n3.平滑升級和回滾

平滑升級和回滾 1. 平滑升級流程2. 平滑升級和回滾案例 有時候我們需要對Nginx版本進行升級以滿足對其功能的需求&#xff0c;例如添加新模塊&#xff0c;需要新功能&#xff0c;而此時 Nginx又在跑著業務無法停掉&#xff0c;這時我們就可能選擇平滑升級 1. 平滑升級流程 平…

使用ChatGPT來撰寫和潤色學術論文的教程(含最新升級開桶ChatGpt4教程)

現在有了ChatGPT4o更加方便了, 但次數太少了 想要增加次數可以考慮升級開桶ChatGpt4 一、引言 在學術研究中&#xff0c;撰寫高質量的論文是一項重要的技能。本教程將介紹如何利用ChatGPT來輔助完成從論文構思到潤色的全過程。 二、使用ChatGPT寫論文 1. 寫標題 Title/Topic…