首页 > 其他分享 >[SDK]-菜单 和 树控件

[SDK]-菜单 和 树控件

时间:2024-09-09 21:50:42浏览次数:15  
标签:控件 菜单 hWndTree hWnd ti pi SDK

前言

  • 各位师傅大家好,我是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);

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

总结

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

标签:控件,菜单,hWndTree,hWnd,ti,pi,SDK
From: https://blog.csdn.net/weixin_58038441/article/details/142030857

相关文章

  • 【Qt】解决设置QPlainTextEdit控件的Tab为4个空格
    前言PyQt5是一个用于创建跨平台桌面应用程序的Python绑定集合,它提供了对Qt应用程序框架的访问。用于开发具有图形用户界面(GUI)的应用程序,以及非GUI程序。PyQt5使得Python开发者可以使用Qt的丰富功能来构建应用程序。QPlainTextEdit是Qt框架中的一个纯文本编辑器......
  • 中移ML307A(4G Cat1,C-SDK,OpenCPU)模组学习开发-使用i2c采集sht30温湿度数据
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ML307A_OPEN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  测试1,把文件拷贝到自己工程的 ......
  • 【解决了一个小问题】错误配置 s3 sdk 的 part size 导致 oom
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯某服务上线后,运行一段程序崩溃,一开始以为是panic,为所有的go出来的协程都加上了recover()处理,仍然未找到崩溃原因。更奇怪的是,在aws云中,程序崩溃后,其对应的容器一直......
  • 中移ML307R(4G Cat1,C-SDK,OpenCPU)模组学习开发-使用i2c采集sht30温湿度数据
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ML307R_OPEN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  测试1,把文件拷贝到自己工程的 ......
  • 办公软件:管理和组织菜单栏图标Bartender 4 for Mac
    Bartender是一款专为macOS用户设计的强大软件,主要用于管理和组织菜单栏图标。软件下载地址主要特点:一、菜单栏图标管理菜单栏图标隐藏:用户可隐藏菜单栏图标,仅在需要时显示,减少视觉干扰,使界面更整洁专注。可自定义的菜单栏排序:提供直观拖放界面,用户能自定义图标的顺序和......
  • qt 调用微信sdk 具体实现
    一基本功能好的,我理解您想要更具体的实现细节。我会为您提供一个更详细的示例,展示如何在Qt应用程序中集成微信SDK的主要功能。这个示例将包括初始化、登录、分享和支付功能。请注意,由于微信SDK的具体API可能会随版本变化,您可能需要根据您使用的SDK版本进行一些调整......
  • 更改 Windows Kits (SDK) 安装路径
    Windowskits默认情况下会装在安装VisualStudio所在磁盘的根目录,当VisualStudio没有安装在c盘的时候,在工具盘看到一个WindowsKit的目录,会导致强迫症患者不能忍。今天探索了下操作步骤:运行regedit打开注册表。找到 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Mi......
  • Delphi怎样安装和配置第三方控件并处理找不到文件
    一、提示信息:[dcc64Error]E1026Filenotfound:‘***.res’二、解决方法:1、正解:应当去看官方的安装说明文档,比如若你用自动或手动方式安装和部署TMSFlexCelStudioforVCLandFireMonkey*.*.*.*.exe时,你应当仔细阅读官方的安装说明:http://www.tmssoftware.biz/flexcel/d......
  • 直播美颜SDK与主播美颜工具:实时美颜技术的深度解析
    本篇文章,笔者将深入解析直播美颜SDK的核心技术与主播美颜工具的开发原理。 一、什么是直播美颜SDK?通过集成美颜SDK,开发者可以在直播应用中快速实现脸部优化、滤镜添加、皮肤调整等功能,帮助主播在直播过程中实时呈现最佳状态。不同于传统的后期处理,直播美颜SDK依靠强大的实时处理能......