[SDK]-菜单 和 树控件

news2024/11/16 19:48:10

前言

  • 各位师傅大家好,我是qmx_07,今天给大家讲解菜单和树控件的相关知识
    在这里插入图片描述

菜单

认识菜单 及 创建自定义菜单栏

  • 资源文件 -> 项目名.rc ->Menu
    在这里插入图片描述
  • 这是系统提供的默认菜单,也可以往里面添加修改内容
    以下是 自定义菜单栏:
    在这里插入图片描述
  • 创建视图,修改菜单选项,需要绑定到注册窗口
    在这里插入图片描述
    在这里插入图片描述
  • 通过创建自定义视图,绑定注册窗口,视觉效果就完成了,还需要对点击菜单选项,做出对应的效果

创建右键菜单栏

  • 创建菜单视图
    在这里插入图片描述
    在这里插入图片描述
  • 设置菜单对应的ID值
    case WM_NOTIFY:
    {
        switch (((LPNMHDR)lParam)->code)
        {
        case NM_CLICK:
        {
            break;
        }
        case NM_RCLICK:
        {
            POINT pt = { 0 };
            GetCursorPos(&pt);
            HMENU hMenu = LoadMenu((HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), MAKEINTRESOURCEW(IDR_MENU1));
            HMENU hSubMenu = GetSubMenu(hMenu, NULL);
            TrackPopupMenu(hSubMenu, TPM_CENTERALIGN, pt.x, pt.y, 0, hWnd, NULL);
            break;
        }
        default:
            break;
        }
        break;
  • 获取光标位置,加载菜单资源,子菜单资源,在鼠标居中的位置弹出菜单
case WM_COMMAND:
        {
        switch (LOWORD(wParam))
        {
        case IDC_GET_TEXT:
        {
            HWND hSWnd = GetDlgItem(hWnd, IDC_LIST);//获取点击的窗口句柄
            DWORD dwltemIndex = ListView_GetSelectionMark(hSWnd);//读取句柄索引
            WCHAR* szBuffer = new WCHAR[50];
            ListView_GetItemText(hSWnd, dwltemIndex, 0, szBuffer, 50);//获取索引0位置的文本信息
            MessageBox(hWnd, szBuffer, L"Msg", MB_OK);
            break;
        }
        case IDC_Delete:
        {
            HWND hSWnd = GetDlgItem(hWnd, IDC_LIST);//获取点击的窗口句柄
            DWORD dwltemIndex = ListView_GetSelectionMark(hSWnd);//读取句柄索引
            SendMessage(hSWnd, LVM_DELETEITEM, dwltemIndex, NULL);
        }

        }
            int wmId = LOWORD(wParam);
            // 分析菜单选择:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
  • 获取文本 和 删除的功能实现
    画面演示:
    在这里插入图片描述

树控件

创建树控件

HWND hTreeWnd = CreateWindow(L"SysTreeView32", L"", WS_VISIBLE | WS_CHILD | WS_BORDER |  TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS, 10, 10, 450, 600, hWnd, (HMENU)1, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
  • WS_BORDER:为窗口创建一个边框。
  • TVS_HASLINES:使树控件显示连接子节点和父节点的线。
  • TVS_LINESATROOT:在树控件的根节点之间也显示线。
  • TVS_HASBUTTONS:在树控件的每个节点旁边显示一个带有加号或减号的按钮,用于展开或折叠子节点。
    增加内容:

增加树控件 节点内容

HTREEITEM CreateTreeNode(HWND hWnd, HTREEITEM hParentNode, const WCHAR* szBuffer)
{
    TVINSERTSTRUCT Stvi;//创建结构体
    Stvi.item.mask = TVIF_TEXT; //设置包含文本
    Stvi.hParent = hParentNode;//设置父节点
    Stvi.hInsertAfter = TVI_LAST;//尾部插入
    Stvi.item.pszText = new WCHAR[50];
    swprintf(Stvi.item.pszText, szBuffer);//将文本分配内存
    HTREEITEM hRoot = (HTREEITEM)SendMessage(hWnd, TVM_INSERTITEM, 0, (LPARAM)&Stvi);//插入
    return hRoot;
}

HTREEITEM hRoot1 = CreateTreeNode(hTreeWnd, TVI_ROOT, L"根节点");
    HTREEITEM h1SubNode1 = CreateTreeNode(hTreeWnd, hRoot1, L"选项1");
    HTREEITEM h1SubNode2 = CreateTreeNode(hTreeWnd, hRoot1, L"选项2");

画面演示:
在这里插入图片描述

对节点 进行弹出文本、修改、删除操作

弹出文本:

case WM_NOTIFY:
    {
        switch (((LPNMHDR)lParam)->code)
        {
        case NM_CLICK:
        {
            //获取文本
            HWND hWndTree = GetDlgItem(hWnd, 1); //获取 树控件ID
            TVHITTESTINFO ti;
            POINT pi = { 0 };
            GetCursorPos(&pi);//获取光标坐标
            ScreenToClient(hWndTree, &pi);//将鼠标光标在屏幕上的坐标转换为树控件窗口的客户区坐标
            ti.flags = TVHT_ONITEMLABEL;//,表示只在树视图项的标签上进行命中测试
            ti.pt = pi;
            HTREEITEM hItem = TreeView_HitTest(hWndTree, &ti);
            TVITEM Item;
            Item.pszText = new WCHAR[50];
            Item.mask = TVIF_TEXT;
            Item.cchTextMax = 50;
            Item.hItem = hItem;
            SendMessage(hWndTree, TVM_GETITEM, NULL, (LPARAM)&Item);/获取树控件文本内容存储在Item中
            MessageBox(NULL, Item.pszText, L"Msg", MB_OK);//显示内容

画面演示:
在这里插入图片描述
修改文本:

            HWND hWndTree = GetDlgItem(hWnd, 1);
            TVHITTESTINFO ti;
            POINT pi = { 0 };
            GetCursorPos(&pi);
            ScreenToClient(hWndTree, &pi);
            ti.flags = TVHT_ONITEMLABEL;
            ti.pt = pi;
            HTREEITEM hItem = TreeView_HitTest(hWndTree, &ti);
            TVITEM Item2;
			Item2.pszText = new WCHAR[50];
			Item2.mask = TVIF_TEXT;
			Item2.cchTextMax = 50;
			Item2.hItem = hItem;
			wsprintf(Item2.pszText, L"qmx_07");
            SendMessage(hWndTree, TVM_SETITEM, NULL, (LPARAM)&Item2);

画面演示:
在这里插入图片描述
删除:

            HWND hWndTree = GetDlgItem(hWnd, 1);
            TVHITTESTINFO ti;
            POINT pi = { 0 };
            GetCursorPos(&pi);
            ScreenToClient(hWndTree, &pi);
            ti.flags = TVHT_ONITEMLABEL;
            ti.pt = pi;
            HTREEITEM hItem = TreeView_HitTest(hWndTree, &ti);
            SendMessage(hWndTree,TVM_DELETEITEM, NULL, (LPARAM)hItem);

画面演示:
在这里插入图片描述

总结

  • 介绍了菜单和控件的创建,获取文本和删除的相关知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2120063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何通过Autoscaler实现Kubernetes的伸缩?

本文将介绍如何在流量高峰之前使用KEDA和Cron scaler主动调整工作负载规模。 在设计Kubernetes集群时,我们可能经常需要回答以下问题: 集群伸缩需要多长时间?在新Pod创建之前需要等待多长时间? 有四个主要因素会影响集群的伸缩…

Windows环境下 VS2022 编译 OGG 源码

OGG OGG音频编码格式,全称为Ogg Vorbis,是一种开源且无专利限制的音频压缩格式。它被设计用来提供高质量的音频存储和传输,同时保持较小的文件大小。OGG Vorbis支持多声道音频,并且可以处理可变比特率,这意味着它可以根…

分享从零开始学习网络设备配置--任务6.3 使用基本ACL限制网络访问

任务描述 某公司构建了互联互通的办公网,为保护公司内网用户数据的安全,该公司实施内网安全防范措施。公司分为经理部、财务部和销售部,分属3个不同的网段,3个部门之间用路由器进行信息传递。为了安全起见,公司领导要求…

npm 清除缓存

npm cache clean --forcenpm cache verify# 安装依赖 npm install# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 npm install --registryhttps://registry.npmmirror.com npm彻底清理缓存_npm cache verify-CSD…

OpenCV仿射变换和透视变换函数(C++)

文章目录 引言图像仿射变换 warpAffine()图像的旋转仿射变换 透视变换 warpPerspective()透视变换例子参考文献 **仿射变换相关函数** cv::transform():对一组点进行仿射变换 cv::warpAffine():对整幅图像进行仿射变换 cv::getAffineTransform()&#xf…

[基于 Vue CLI 5 + Vue 3 + Ant Design Vue 4 搭建项目] 01 安装 nodejs 环境

文章目录 下载安装测试 这里让我们去看看如何安装一下 nodejs 的环境 下载 通过官网进行下载安装包 官网 https://nodejs.org/zh-cn点击 下载 Node.js (LTS) 开始下载 安装 下载完成之后,双击进行安装 开始进行安装了 这样,node.js 就安装好了 测试 …

Ubuntu下使用Cron定时任务

Ubuntu下使用Cron定时任务 文章目录 Ubuntu下使用Cron定时任务概述Cron 工作原理crontab的基本指令使用Cron 定时任务语法用户的crontab 文件系统的crontab 文件cron 任务设置环境变量1. 直接在 crontab 中声明变量2. 将变量声明为命令的一部分3. 从文件加载变量使用环境变量控…

网络基础入门指南(二)

一、什么是交换机 交换机,Switch 用于将多台计算机/交换机连接到一起,组建网络 交换机负责为其中任意两台计算机提供独享线路进行通信类型: 非网管(即插即用),便宜,不可管理 网管&#xff0…

CCF推荐C类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)

中国计算机学会(CCF)在计算机体系结构、并行与分布计算、存储系统领域推荐了一系列C类会议和期刊。此汇总涵盖了各期刊和会议的全称、出版社、dblp文献网址及研究领域,为学者和研究人员提供了重要的学术交流资源。列表包括《ACM Journal on E…

Javase复习day21算法、arrays、Lamdba表达式

常见算法 查找算法 基本查找 package search;public class BasicSearchDemo1 {public static void main(String[] args) {//基本算法(顺序查找)int[] arr {131,23,57,37,95,48,57,43};System.out.println(basicSearch(arr, 43));}public static boo…

基于PINN 进行混合流体中的热量与质量扩散预测

近年来,物理信息神经网络(PINN,Physics-Informed Neural Networks)成为解决复杂物理问题的一种强大工具。PINN 的核心在于结合物理定律和机器学习的能力,直接从偏微分方程(PDEs)出发&#xff0c…

LDtk to Unity 大致流程和一些注意点

因为自己也还在探索中,所以有点杂乱,后续有其他的东西还会继续更。 制作 先套用这个模板,确定基础的循环。再去丰富。 LDtk一小时完全入门教程_哔哩哔哩_bilibili To Unity 安装包 LDtk To Unity 输出 图集 在Run after saving运行 ../../Lib…

Arch - 架构安全性_凭证(Credentials)

文章目录 OverView凭证(Credentials)1. 传统认证授权方式:Cookie-Session 机制2. OAuth2 令牌概述什么是 JWTJWT 令牌 结构HeaderPayloadSignature JWT的优劣势无状态架构的挑战 3. JWT 与 Cookie-Session 的对比 OverView 即使只限定在“软…

rustDesk远程软件,强的可怕

背景 最近在做一个机房的远程运维,对面系统都是windows的,远程本来采用的向日葵,开两三个窗口就不能再多开了,没办法冲了年费瓜子会员,开通会员之后,确实好很多。 随后又增加了一个值班人员,我…

HarmonyOs 应用基础--ArkTS-核心-基础

目录 八. ArkTS-语句-类型进阶与渲染控制 1. 对象进阶 1.1. 定义对象数组 1.2. 使用对象数组 2. 渲染控制 - ForEach 2.1. ForEach语法 2.2. ForEach使用优化代码 2.3. 案例-学生档案 实现思路 3. Math对象 4. 综合案例 -- 抽奖卡案例 4.1. 初始页面布局(静…

手机到了外地ip地址就变了吗

手机到了外地IP地址就变了吗?随着智能手机的普及,人们越来越频繁地使用手机进行各种网络活动。然而,关于手机IP地址是否会随着地理位置的变化而改变,许多用户仍心存疑惑。本文将深入探讨这一问题,揭示IP地址变化的奥秘…

【C++ 09】继承

文章目录 🌈 一、继承的概念及定义⭐ 1. 继承的概念⭐ 2. 继承的定义🌙 2.1 定义格式🌙 2.2 继承方式和访问限定符🌙 2.3 继承父类成员访问方式的变化🌙 2.4 默认继承方式 🌈 二、父类和子类对象赋值转换⭐…

分布式通信:多计算平台的任务分配

目录 1. 分布式通信 1.1 树莓派配置流程​编辑 1.2 树莓派和laptop处于同一网络​编辑 1.3 laptop配置 1.4 通信测试 1.5 分组通信 ​编辑 1.6 分布式通信测试 ​编辑参考资料 1. 分布式通信 机器人体积较小,采用树莓派作为控制器,实现传感器处…

仿某皮影狸app官网源码 不错的APP下载官网单页源码 HTML源码

分享一款不错的APP下载官网单页源码,直接修改index.html即可 源码下载:https://download.csdn.net/download/m0_66047725/89731228 更多资源下载:关注我。

OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、选择映射(SLM) 4.2 相位截断星座图(PTS) 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 mat…