【MFC】樹控件的使用詳解

目錄

添加線條鏈接

添加折疊小按鈕

設置樹控件的節點和對應的圖標

設置默認選中項?

設置選中項切換響應函數?

涉及接口介紹:


首先我們通過資源視圖可以添加一個樹形控件,如下:?

添加線條鏈接

在樹形控件中,有一個屬性“Has Lines”,如下圖所示(這里因為漢化的原因顯示中文):?

當?“Has Lines”為true時,子節點與父節點之間會添加線條鏈接,效果如下:

上面雖然子節點與父節點之間雖然有線條鏈接,但是可以發現與根節點之間并沒有線條鏈接,這里可以在設置 “Lines At Root”屬性如下:

添加折疊小按鈕

默認情況下,每個父項節點是沒有“+”按鈕,進行展開/收起子節點的,這里有一個屬性“Has Buttons”,如下:

當?“Has Buttons”屬性為true時,效果如下:

設置樹控件的節點和對應的圖標

第一步:準備icon資源,如果原始圖片資源不是icon資源,我們可以先通過如下鏈接,將圖片資源轉換為icon格式

Convertio — 文件轉換器https://convertio.co/zh/將準備好的icon資源放到項目所在目錄下的res目錄中

隨后,在資源視圖中添加資源->icon->導入

第二步:通過代碼添加樹控件節點和對應的圖標

這里需要注意的是CImageList imgeList必須在頭文件聲明,因為這里是在初始化函數中執行的,當函數結束,對話窗窗口還存在,樹控件還指向imgeList中的圖標,就會導致訪問已經釋放的資源問題。

	/*1、加載圖片資源*/HICON img[3];img[0] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);img[1] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);img[2] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);imgeList.Create(30, 30, ILC_COLOR32, 3, 3);for (int i = 0; i < 3; ++i) {imgeList.Add(img[i]);}m_tree.SetImageList(&imgeList, TVSIL_NORMAL);/*2、設置節點、節點圖標、節點的父節點*/HTREEITEM root = m_tree.InsertItem(L"根節點", 0, 0, TVI_ROOT);HTREEITEM parent = m_tree.InsertItem(L"父節點", 1, 1, root);HTREEITEM sub1 = m_tree.InsertItem(L"子節點", 2, 2, parent);

?效果如下:

設置默認選中項?

	HTREEITEM root = m_tree.InsertItem(L"根節點", 0, 0, TVI_ROOT);HTREEITEM parent = m_tree.InsertItem(L"父節點", 1, 1, root);HTREEITEM sub1 = m_tree.InsertItem(L"子節點", 2, 2, parent);/*設置默認選中項*/m_tree.SelectItem(sub1);

效果如下:

設置選中項切換響應函數?

?在樹控件中,選中項切換對應的響應函數是TVN_SELCHANGED,如下:

我們可以在這個函數中編寫需要的代碼

涉及接口介紹:

1、AfxGetApp()->LoadIcon()

功能:加載應用程序圖標資源(已經通過資源文件導入的資源)

語法:

HICON LoadIcon(UINT nIDResource);

參數 :

  • nIDResource :圖標資源ID(如 IDR_MAINFRAME )

返回值 :成功返回圖標句柄(HICON),失敗返回NULL。

說明 :

  • AfxGetApp() 獲取當前應用程序對象指針
  • 從應用程序資源中加載指定ID的圖標

2、CImageList::Create()

功能:創建圖像列表對象

語法:

BOOL Create(int cx,           // 圖像寬度int cy,           // 圖像高度UINT nFlags,      // 圖像類型標志int nInitial,     // 初始圖像數量int nGrow         // 增長數量
);

參數詳解 :

-cx :每個圖像的寬度(像素)
-cy :每個圖像的高度(像素)
-nFlags :圖像類型標志,常用值:
? - ILC_COLOR :使用默認行為
? - ILC_COLOR4 :4位(16色)
? - ILC_COLOR8 :8位(256色)
? - ILC_COLOR16 :16位(65536色)
? - ILC_COLOR24 :24位(真彩色)
? - ILC_COLOR32 :32位(真彩色+Alpha通道) //常用
? - ILC_MASK :使用掩碼
- nInitial :圖像列表的初始容量
- nGrow :當需要更多空間時的增長數量

返回值 :成功返回TRUE,失敗返回FALSE。

3、CTreeCtrl::SetImageList()

功能:為樹控件設置圖像列表

語法:

CImageList* SetImageList(CImageList* pImageList,  // 圖像列表指針int nImageListType       // 圖像列表類型
);

參數 :

- pImageList :指向CImageList對象的指針
- nImageListType :圖像列表類型,常用值:
? - TVSIL_NORMAL :正常狀態圖像列表? //常用
? - TVSIL_STATE :狀態圖像列表
返回值 :返回之前設置的圖像列表指針。

4、CTreeCtrl::InsertItem()

功能:在樹控件中插入新節點

語法:

HTREEITEM InsertItem(LPCTSTR lpszItem,        // 節點文本int nImage,              // 正常狀態圖像索引int nSelectedImage,      // 選中狀態圖像索引HTREEITEM hParent,       // 父節點句柄HTREEITEM hInsertAfter   // 插入位置
);// 簡化版本
HTREEITEM InsertItem(LPCTSTR lpszItem,        // 節點文本HTREEITEM hParent,       // 父節點句柄HTREEITEM hInsertAfter   // 插入位置
);

參數詳解 :

- lpszItem :節點顯示的文本字符串
- nImage :節點正常狀態時顯示的圖像索引(對應圖像列表中的索引)
- nSelectedImage :節點被選中時顯示的圖像索引
- hParent :父節點句柄,特殊值:
? - TVI_ROOT :作為根節點插入
? - 其他HTREEITEM:作為指定節點的子節點
- hInsertAfter :插入位置,特殊值:
? - TVI_FIRST :插入為第一個子節點
? - TVI_LAST :插入為最后一個子節點
? - TVI_SORT :按字母順序插入

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

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

相關文章

跨境賣家警報。抽繩背包版權案立案,TRO在即速排查

近日Shenzhenshi Jingyida Trading Co., LTD委托律所Dewitty And Associates, Chtd.對其熱銷的抽繩設計多功能運動背包發起跨境版權維權&#xff0c;保護范圍涵蓋產品外觀設計。 案件基本情況&#xff1a; 起訴時間&#xff1a;2025-6-12 案件號&#xff1a;25-cv-06509 原…

Android Activity全面解析:從創建到生命周期的完整指南

Activity作為Android四大組件之一&#xff0c;是構建用戶界面的核心單元。筆者通過郭霖著的第一行代碼入門安卓&#xff0c;內容基本都取自書中&#xff0c;這篇博客作為筆者的筆記同時精簡了一些書中內容分享在csdn中 一、Activity的創建與基礎配置 1.1 創建Activity的基本步…

深入理解 Python 的 secrets 模塊:打造更安全的隨機數生成機制

深入理解 Python 的 secrets 模塊&#xff1a;打造更安全的隨機數生成機制 在構建涉及用戶身份認證、權限管理、加密通信等系統時&#xff0c;開發者最不能忽視的一個問題就是“安全性”。安全問題的核心之一在于“隨機性”——尤其是密碼、驗證碼、Token、Session、API Key 的…

CHAPTER 19 Concurrency Models in Python

一、A Bit of Jargon 1、關鍵術語解析 1.1 并發 (Concurrency) 定義: 并發是指同時處理多個待處理任務的能力&#xff0c;這些任務可以依次或并行&#xff08;如果可能&#xff09;進行&#xff0c;最終每個任務都會成功或失敗。 理解: 單核 CPU: 即使是單核 CPU 也可以實…

DCM4CHEE Archive Light 開發環境部署(5)-IDEA集成調試配置

系列文章目錄 DCM4CHEE Archive light 開發環境部署(1)-前言DCM4CHEE Archive light 開發環境部署(2)-PostgreSQLDCM4CHEE Archive light 開發環境部署(3)-OpenLDAPDCM4CHEE Archive light 開發環境部署(4)-Wildfly(JBoss)DCM4CHEE Archive light 開發環境部署(5)-IDEA集成…

在rust中執行命令行輸出中文亂碼解決辦法

如果你使用標準的依賴庫執行命令中包含中文的話&#xff0c; 就會發現中文亂碼&#xff0c;如果你的輸出中沒有中文&#xff0c;就可以正常輸出&#xff0c;因為windows的命令行默認使用的是gbk編碼。。。。。 #[tauri::command] pub async fn run_command(command: String) -…

判斷當前瀏覽器卡不卡

方法一&#xff1a;使用 requestAnimationFrame 和時間戳計算平均 FPS let frameCount 0; let lastTime performance.now(); let fps 0; let isSlow false; // 是否卡頓的標志function calculateFPS(currentTime) {frameCount;// 每隔大約 1000 毫秒&#xff08;1秒&#…

51c嵌入式~電路~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11748634 一、延長電子元器件的貨架壽命 本文探討了電子元器件的貨架壽命問題&#xff0c;重點討論了氧化、濕度敏感等級&#xff08;MSL&#xff09;與貨架壽命之間的關系。文章通過具體例子說明了氧化對電子元器件可…

Eureka 與 Feign(一)

Eureka 與 Feign 知識解析 1. Eureka Spring Cloud Eureka 是服務發現組件&#xff0c;包含&#xff1a; Eureka Server&#xff1a;注冊中心&#xff0c;管理服務實例Eureka Client&#xff1a;服務實例&#xff0c;向注冊中心注冊/獲取服務信息 核心功能&#xff1a; 服…

AN動畫軟件|Animate 2025百度云下載與安裝教程指南

如大家所了解的&#xff0c;?Animate全稱Adobe Animate&#xff0c;常常也被簡稱為AN。它是一款2D動畫制作軟件?&#xff0c;其前身為Flash Professional CC&#xff0c;2016年更名為Animate CC&#xff0c;支持Flash SWF文件及HTML5動畫創作&#xff0c;廣泛應用于網頁交互、…

提示詞工程中常見協議框架應用實例

一、生成式診斷催化協議(Generative Diagnosis Catalysis, GDC) 技術原理:基于神經符號系統的因果推理引擎,融合貝葉斯網絡與強化學習 實施場景: class DiagnosticCatalyst:def __init__(self, domain="醫療診斷"):self.causal_graph

資深Java工程師的面試題目(七)JDK JVM

以下是針對 Java 面試者 的 JVM 和 JDK 相關題目&#xff0c;涵蓋核心知識點、實際應用場景和進階問題&#xff1a; 一、JVM 基礎 1. JVM 內存模型 題目&#xff1a; 請描述 JVM 的內存模型及其組成部分&#xff0c;并說明每個區域的作用。 解析&#xff1a; JVM 內存模型分…

【系統設計【4】】設計一個限流器:從理論到實踐的完整解決方案

文章目錄 第一步&#xff1a;理解問題并確定設計范圍1、為什么需要限流器2、需求澄清的藝術3、需求總結與優先級 第二步&#xff1a;提出高層次設計并獲得認同1. 限流器的部署位置選擇2. 限流算法的選擇與權衡3. 高層架構設計 第三步&#xff1a;深入設計1、限流規則的設計與管…

基于DETR目標檢測項目

DETR見解 DETR&#xff08;Detection Transformer&#xff09;是一種端到端的目標檢測模型&#xff0c;由Facebook AI Research&#xff08;FAIR&#xff09;于2020年提出。DETR采用了Transformer架構&#xff0c;與傳統的基于區域的目標檢測方法有所不同&#xff0c;它通過全…

ZooKeeper 集群部署

ZooKeeper 集群部署 前言安裝部署資源下載JDK 部署Zookeeper 部署 前言 在 Linux 服務器上部署 Zookeeper 之前&#xff0c;需要先安裝 JDK。以下是相關版本及環境信息&#xff1a; JDK 版本 jdk-17_linux-x64_bin.tar.gz Zookeeper 部署的版本 3.5.7 操作系統版本 Red Hat E…

8.TCP Server端實現

1.C/S模型 2.Server 端功能分析 tcp_server.c #include "tcp_server.h" #include "lwip/sockets.h" #include <stdio.h>char ReadBuff[BUFF_SIZE]; /* TCP服務器任務函數 */ void vTcpserver_Task(void) {int sfd, cfd, n, i;struct sockaddr_in…

課設作業圖書管理系統

用戶注冊&#xff0c;登錄 播放地址 課設作業圖書管理系統_嗶哩嗶哩_bilibili 對圖書進行增刪改查 package com.xwr.controller; import com.xwr.entity.Book; import com.xwr.entity.Category; import com.xwr.service.BookService; import com.xwr.service.CategoryServ…

springboot 配置加密

springboot 配置加密 [TOC](springboot 配置加密) 前言一、在配置類賦值之前解密二、修改賦值后加密的配置類 前言 在一些國家項目中經常會要求不能暴露數據庫鏈接和密碼, 所以需要對配置文件里面的一些配置進行加密處理。 解決方法有兩種&#xff1a;一種是在配置加載后還沒給…

【操作系統】macOS軟件提示“已損壞,打不開”的解決方案

macOS軟件提示“已損壞&#xff0c;打不開”的解決方案 在使用 macOS 系統時&#xff0c;不少用戶都遇到過這樣的情況&#xff1a;當嘗試打開某個應用程序時&#xff0c;系統彈出提示“xxx 已損壞&#xff0c;打不開。您應該將它移到廢紙簍”&#xff0c;或者顯示“無法打開‘…

數據庫系統概論(二十)數據庫恢復技術

數據庫系統概論&#xff08;二十&#xff09;數據庫恢復技術 前言一、事務的基本概念1. 什么是事務&#xff1f;2. 事務的兩種"打開方式"2.1 隱式事務2.2 顯式事務&#xff1a;自己動手打包操作 3. 事務的四大"鐵律3.1 原子性3.2 一致性3.3 隔離性3.4 持久性 4.…