首先参阅

https://blog.csdn.net/bcbobo21cn/article/details/106287676

认识Windows公共控件库的使用;

一 创建树视图

首先用如下代码看一下,创建树视图控件是否成功返回句柄;

hTree = CreateWindow("SysTreeView32", NULL, 
 WS_CHILD | WS_BORDER |WS_VISIBLE | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT,
 10, 20, 200, 400, hwnd, NULL, NULL, NULL);
wsprintf(szBuffer, "0x%X",hTree);
MessageBox(NULL,szBuffer,TEXT("树视图句柄"),0);

创建成功;但此时树视图是空的;只有一个框;

二 添加第一个结点

代码;

TvInsertItem.hParent = NULL;
            TvInsertItem.hInsertAfter = TVI_LAST;
            TvInsertItem.item.mask = TVIF_TEXT;
            TvInsertItem.item.pszText = pStrText;        
            //TVI_LAST:insert the item at the end of list
            hitema=SendMessage(hTree, TVM_INSERTITEM, 0, (LPARAM)(&TvInsertItem));;
  添加结点的操作为:

定义  TVINSERTSTRUCT 结构体对象TvInsertItem,此结构体代表一个结点;

为TvInsertItem赋值,.hParent是此结点的父,根结点填为NULL;

向树视图发送消息,第一个参数是树视图句柄,第四个参数是TvInsertItem结构体地址并转为LPARAM类型;

创建成功返回的是此次创建的结点的句柄,为 HTREEITEM 类型;

效果如下;

工程;

三 添加更多结点

创建子结点,.hParent成员填为父结点句柄;如果再创建根结点,.hParent填为NULL;

效果如下;

码:

#include <windows.h>
#include <commctrl.h>
#include "resource.h"LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);HINSTANCE hInst;
TCHAR szClassName[] = TEXT("win32TreeDemo");
HWND hTree;int WINAPI
WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{HWND hwnd;MSG messages;WNDCLASSEX wincl;hInst = hThisInstance;wincl.hInstance = hThisInstance;wincl.lpszClassName = szClassName;wincl.lpfnWndProc = WindowProcedure;wincl.style = CS_DBLCLKS;wincl.cbSize = sizeof (WNDCLASSEX);wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);wincl.hCursor = LoadCursor (NULL, IDC_ARROW);wincl.lpszMenuName = MAKEINTRESOURCE (IDC_WIN32TREEDEMO);wincl.cbClsExtra = 0;wincl.cbWndExtra = 0;wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);if (!RegisterClassEx (&wincl))return 0;hwnd = CreateWindowEx (0,szClassName,TEXT("win32TreeDemo"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,300,500,HWND_DESKTOP,NULL,hThisInstance,NULL);ShowWindow (hwnd, nFunsterStil);while (GetMessage (&messages, NULL, 0, 0)){TranslateMessage(&messages);DispatchMessage(&messages);}return messages.wParam;
}LRESULT CALLBACK
WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{PAINTSTRUCT ps;HDC hdc;RECT rt;int ret;char szBuffer[100];char* pStrText="根结点AAAA";char* pStrText2="子结点AABB";char* pStrText3="子结点AACC";char* pStrText4="根结点BBBB";TVINSERTSTRUCT TvInsertItem, TvInsertItem2, TvInsertItem3, TvInsertItem4;HTREEITEM hitema, hitemb, hitemab, hitemac;switch (message){case WM_COMMAND:switch (LOWORD(wParam)){case IDM_ABOUT:MessageBox (hwnd, TEXT ("win32TreeDemo v1.0\nCopyright (C) 2020\n by bo"),TEXT ("win32TreeDemo"), MB_OK | MB_ICONINFORMATION);break;case IDM_EXIT:DestroyWindow(hwnd);break;default:return DefWindowProc(hwnd, message, wParam, lParam);              }break;case WM_CREATE:hTree = CreateWindow("SysTreeView32", NULL, WS_CHILD | WS_BORDER |WS_VISIBLE | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT,10, 20, 200, 400, hwnd, NULL, NULL, NULL);//wsprintf(szBuffer, "0x%X",hTree);//MessageBox(NULL,szBuffer,TEXT("树视图句柄"),0);               TvInsertItem.hParent = NULL;TvInsertItem.hInsertAfter = TVI_LAST;TvInsertItem.item.mask = TVIF_TEXT;TvInsertItem.item.pszText = pStrText;       //TVI_LAST:insert the item at the end of listhitema=SendMessage(hTree, TVM_INSERTITEM, 0, (LPARAM)(&TvInsertItem));;TvInsertItem2.hParent = hitema;TvInsertItem2.hInsertAfter = TVI_LAST;TvInsertItem2.item.mask = TVIF_TEXT;TvInsertItem2.item.pszText = pStrText2;        hitemab=SendMessage(hTree, TVM_INSERTITEM, 0, (LPARAM)(&TvInsertItem2));;TvInsertItem3.hParent = hitema;TvInsertItem3.hInsertAfter = TVI_LAST;TvInsertItem3.item.mask = TVIF_TEXT;TvInsertItem3.item.pszText = pStrText3;      hitemac=SendMessage(hTree, TVM_INSERTITEM, 0, (LPARAM)(&TvInsertItem3));;TvInsertItem4.hParent = NULL;TvInsertItem4.hInsertAfter = TVI_LAST;TvInsertItem4.item.mask = TVIF_TEXT;TvInsertItem4.item.pszText = pStrText4;        hitemb=SendMessage(hTree, TVM_INSERTITEM, 0, (LPARAM)(&TvInsertItem4));;break;case WM_PAINT:hdc = BeginPaint(hwnd, &ps);                  GetClientRect(hwnd, &rt);           EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage (0);break;default:return DefWindowProc (hwnd, message, wParam, lParam);}return 0;
}

资源文件,头文件;

#include "resource.h"
#include <windows.h>/
//
// Menu
//IDC_WIN32TREEDEMO MENU
BEGINPOPUP "&File"BEGINMENUITEM "E&xit",                    IDM_EXITENDPOPUP "&Help"BEGINMENUITEM "&About ...",             IDM_ABOUTEND
END
#define  IDM_EXIT        10001
#define     IDM_ABOUT       10002#define    IDC_WIN32TREEDEMO       10101
#define     IDD_ABOUTBOX    10102

Win32 树视图控件的基本使用相关推荐

  1. linux sort -w32,WIN32汇编: 31.列表视图控件

    第三十一课 列表视图控件 本课中我们将学习如何创建和使用列表视图控件. 理论: 列表视图控件和树型视图.丰富文本编辑控件一样是通用控件的一种.可能您都已经知道了列表视图控件,只不过是不知道它的确切名字 ...

  2. PIE SDK图层树伙伴控件示例

    1.  功能简介 TocControl控件的主要作用是显示当前加载的图层有哪些.采用什么样的符号等,目的是使用户对当前加载的数据和结构有一个总体的把握.与之相关联的伙伴控件有MapControl,Pa ...

  3. LVITEM结构-列表视图控件的一个数据结构

    列表视图控件(List Control) 列表视图控件是一种非常常用的控件,在需要以报表形式显示数据时,列表控件通常是最好的选择,许多专用的数据报表控件,也是在它的基础上派生而来.与树视图类似,列表控 ...

  4. 树型控件TreeView的几种用法

    1 基本用法 void TreeViewDataBind()         {             //首先清除树型控件内的结点             this.TreeView1.Nodes ...

  5. VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)

    上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构体的定义.本节继续讲解下半部分,包括列表视图控件的创建.CListCtrl类的主要成员函数 ...

  6. 学习笔记(五)——数据适配器、数据表、数据网格视图控件的综合应用。

    学习笔记(五)--数据适配器.数据表.数据网格视图控件的综合应用. 1.  批量修改 修改包括增加,删除以及更新3个操作,所以声明实力化3个SQL命令分别应用于插入,删除以及修改 将声明的SQL命令连 ...

  7. vc++树状控件(TreeCtrl)用法

    /添加树状/ HTREEITEM hItem,hChildItem; //定义树状控件的句柄 CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE);/ ...

  8. GTK构件 --- 文本视图控件GTKtextview

    GTK构件 - 文本视图控件GTKtextview   文本视图控件(GtkTextView)是用以取代原有的文本编辑(GtkText)控件的,它包括一个文本缓冲区(GtkTextBuffer),用来 ...

  9. C#|Winform编程之(列表视图控件)listView控件

    列表视图控件主要功能是将对象(文件.图片.项目)等通过列表的形式展示出来.就像我们在windows操作系统中点开每个文件夹之后对于文件夹下的文件,都是一种列表视图.我们可以选择大图标视图.小图标视图. ...

最新文章

  1. JS验证控制输入中英文字节长度(input、textarea等)
  2. hibernate-jpa/hibernate-jpa-2.1-api-1.0.0.final.jar源代码下载地址
  3. WEB前端学习五 js什么是引用类型
  4. js模板引擎 之handlebars.js
  5. 【华为云技术分享】如何处理暗数据?
  6. python改文件名_python 怎么改文件名
  7. Digix联合创始人:在接下来的12个月中 比特币将被称为真正的价值存储
  8. Web应用开发基本技术及思想
  9. python,pygame下载与安装详细步骤
  10. C# OpenCV OpenCVSharp应用实例--LCD屏幕脏污检测
  11. 拉结尔6月21日服务器维护,《拉结尔》3月5日更新公告-S6赛季降临
  12. 基于NXP i.MX 8M Plus处理器的核心板和开发板有什么功能
  13. python指纹识别_Python实现指纹识别你见过没?
  14. Android百度地图
  15. 【python初学者日记】selenium初体验——“秒杀商品”、“清空购物车”技能养成记(一)
  16. CAD进阶练习(二)
  17. LYNC 中文版安装详解-第一部分
  18. Beam Failure Detection
  19. SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6] SLF4J: See htt
  20. 经典一百句(俞敏洪推荐)

热门文章

  1. 在二叉树中找到累加和为指定值的最长路径长度
  2. Java键盘交互设计输入法,输入法中暖心的交互细节
  3. MySQL 高级 - 存储过程 - 语法 - repeat循环
  4. 原型模式——浅克隆和深克隆
  5. 各种主流数据库的比较
  6. hibernate同时插入两条相同数据(偶尔)原因调查
  7. 工作中常用的第三放的框架
  8. ueditor百度编辑器常见报错的解决方法
  9. Android studio导出的apk在真机上安装提示“文件不存在或已失效”的解决方法
  10. inline函数使用容易导致出错的问题