为什么80%的码农都做不了架构师?>>>   

在SDK中使用控件非常的麻烦,不像VB之类的编辑工具,直接设置控件属性就能很方便的控制控件。平时用得最多的控件包括按钮、ListBox、 Combobox、Edit、Image List等,学了一个多月SDK,发现只会用按钮和Edit控件,其它的控件一点儿都不会用,所以决定拿些时间来熟悉这些常用控件,首先准备熟悉的是 TreeView控件。 一、TreeView 不管是作用TreeView控件还是ListView控件,都得用到几个结构体,如果对这些结构体不了解,那在使用控件时就糊理糊涂的,胡乱修改结构体的值,设置不出想要的结果,也不知改哪里,结果出来了也不知怎么出来的。不知为什么,今晚状态特别好,心很静,前几天熟悉控件的使用时,直接从 MSDN上把代码复制下来,也没心思去读代码,搞了半天也显示不出想要的结果,有句话说得很对,心态决定成败。 使用TreeView控件会用到TVITEM、TVINSERTSTRUCT二个结构体,熟悉了这二个结构体,控制TreeView就基本不成问题了。 1.TVITEM结构体 该结构体是用来设置节点信息的,比如节点的名称、节点名称占用的长度、指定能使用的结构体成员以及节点状态等信息。先来看看TVITEM结构体的定义: typedef struct tagTVITEM { UINT mask; HTREEITEM hItem; UINT state; UINT stateMask; LPTSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int cChildren; LPARAM lParam; } TVITEM, *LPTVITEM; mask 是指定能使用的结构体成员,比如将mask的值设置为“TVIF_TEXT | TVIF_STATE”,那么就只能使用TVITEM结构体中的pszText和state成员,当然,mask成员无论在什么时候都是可用的。 hItem 选择该节点的句柄,搞了半天才明白这个成员的作用,既然是句柄,那就得先获取句柄,然后才能使用句柄。在TreeView创建第一个节点时,是不用设置这个成员的。有了第一个节点后,可以通过多种途径来获取一个节点的句柄,如TreeView_InsertItem函数、 TreeView_GetNextItem函数、TreeView_GetParnt函数等,都可以获取节点的句柄,获取节点的句柄后,就可以对该节点进行控制了。 state 这个是用来设置节点状态的,这个成员的设置貌似挺复杂的,一个节点到底有多少种状态,没搞清。好像应该大概可能是16种状态。好好的研究了一下,发现state成员是一个UINT类型,也就是unsigned int数据类型,是16位的,也就是说每1位是一种状态,刚好有16种状态。0-7位是普通节点的状态,8-11是覆盖图像索引,啥意思?没看懂!12-15位是图像索引,我估摸着,8-11和12-15应该是节点图片的几种状态,操,转了一圈又转回去了。到是0-7位的节点状态比较好理解,整理如下: TVIS_BOLD -节点名称加粗 TVIS_CUT - 将选择的节点作为复制和粘贴的目标 TVIS_DROPHILITED - 将选择的节点作为拖拽目标,用于拖动节点的 TVIS_EXPANDED - 展开该节点下的子节点 TVIS_EXPANDEDONCE -搞不懂?????? TVIS_EXPANDPARTIAL -展开部分节点 TVIS_SELECTED -节点处于选择状态 还有三个 TVIS_OVERLAYMASK -覆盖图像索引的掩码,不太懂 TVIS_STATEIMAGEMASK -图像索引掩码,还是不太懂 TVIS_USERMASK -同 TVIS_STATEIMAGEMASK 这数来数去,怎么只有10种状态,还有6种呢? stateMask stateMask的作用类似于mask,是用于指定有效的节点状态,例如要使用TVIS_BOLD和TVIS_EXPANDED两种状态,就必须在stateMask中指定这两种状态,也就是说state和stateMask中的设置得一样。 pszText 节点名称。 cchTextMax 节点名称长度。 iImage 节点在非选中状态下的图像索引,好像是通过IMAGELIST来建立图像索引。 iSelectedImage 节点在选中状态下的图像索引 表示树控件项是否有相关的子结点的标志位。此成员可以是以下值之一: 0 —— 表示此项没有子结点。 1 —— 表示此此项有一个或多个子结点。 I_CHILDRENCALLBACK —— 父窗口会始终跟踪确定此项是否有子结点。此时,如果树控件需要显示项时,它会给父窗口发送TVN_GETDISPINFO通知消息,决定此项是否有子结点。如果树控件含有TVS_HASBUTTONS风格,则它使用此成员来决定是否显示按钮以表明存在子结点。也可以使用此成员来强制树控件显示按钮,尽管没有在此项之下插入任何子结点。这样可以最小化由于在此项之下插入了子结点所占用的控件内存。 lParam 同控件相关的32位值。是些啥值?不知道 到此虽然对TVITEM结构还有些不清不楚,但对于一般的节点控制应该没啥问题了。 2.TVINSERTSTRUCT结构体 TVITEM结构体是对单个的、独立的节点信息进行设置,而TVINSERTSTRUCT则是对要添加节点的所有属性进行设置,也包括TVITEM 结构体,比如节点添加到TreeView的哪个位置、以及父节点的句柄,其结构体的定义中下: typedef struct tagTVINSERTSTRUCT { HTREEITEM hParent; HTREEITEM hInsertAfter; #if (_WIN32_IE >= 0x0400) union { TVITEMEX itemex; TVITEM item; } DUMMYUNIONNAME; #else TVITEM item; #endif } TVINSERTSTRUCT, *LPTVINSERTSTRUCT; 一共个四个成员 hParent 父节点句柄 hInsertAfter 在哪个节点前插入 item 一个TVITEM结构体 以上这两个结构体,除了TVITEM中的少数几个成员的作用还弄不清外,其余的都了解个七七八八了。

转载于:https://my.oschina.net/dake/blog/196627

在SDK中使用TreeView控件相关推荐

  1. WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

    WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色  在B/S开发中,对TreeView控件要改变当前选中节点的颜色比较方便,其有相应的SelectedNodeChanged事件 ...

  2. VB.net小技巧——VB中利用TreeView控件和Box控件做知识备忘

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 VB.net小技巧--VB中利用TreeView控件和Box控件做知识备忘 这里不涉及代码的展示,主要是为了阐述一种做笔记的思想. 为 ...

  3. Winform编程中的treeview控件

    Winform编程中的treeview控件 treeview基础操作 treeview添加.删除节点操作 treeview节点展开与折叠 treeview节点重命名 treeview获取节点集合并设置 ...

  4. ASP.Net中的TreeView控件中对节点的上移和下移操作

    Web中的TreeView中的没有PreNode和NextNode属性. 但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点. TreeView中要么只有一个根节点:要么 ...

  5. treeview获取选中 vb_VB中TreeView控件实例(转)

    [摘要:]在实际开发中,许多人不喜欢使用TreeView,主要是由于默认的TreeView是"只读"的,不支持添加.删除.编辑.调整节点位置等操作.本文通过一个TVEdit工程说明 ...

  6. winform中TreeView控件复选框联动时鼠标点击过快导致的显示不正确的问题

    今天我在试着做一个C#树形视图(TreeView)控件,要求在每个节点前面添加一个可用于打勾的复选框,并要求复选框有上下级联动的效果.现在在网上能查到挺多满足这类功能的代码,原本我也以为这是一件挺简单 ...

  7. matlab treeview,treeview控件

    高分在线等:C#中如何给treeview控件上的节点前添比如有一treeview1控件,需要在其所有节点前均加一静态小图标(所有节点我也新手,正好刚用过这功能.如下: 1. 到工具箱中拖一个image ...

  8. TreeView 控件

    Windows 窗体 TreeView 控件以类似于在 Windows 资源管理器左窗格中显示文件和文件夹的方式显示节点的层次结构.每个节点可能包含称为子节点的其他节点.父节点或包含子节点的节点可以展 ...

  9. TreeView控件

    尽管一个典型的树结构只有一个根节点,但 TreeView 控件允许您向树结构中添加多个根节点.当您要显示项目列表,但不显示单个主根节点时(例如在产品类别列表中),这一功能很有用. 每个节点都具有一个 ...

  10. VB Treeview控件 介绍与使用

    一.概述 TreeView控件显示Node对象的分层列表,每个Node对象均由一个标签和一个可选的位图组成.TreeView 一般用于显示文档标题.索引入口.磁盘上的文件和目录.或能被有效地分层显示的 ...

最新文章

  1. 东北大米为何如此好吃
  2. 达摩院2022年十大科技趋势发布:AI for Science刚开始,大模型进入冷静期
  3. Python函数的定义和使用教程
  4. 插入排序法(思路及代码实现)
  5. DOM操作中,遍历动态集合的注意事项。ex: elem.children
  6. 腾讯数据库内核团队资深架构师:TXSQL Internals @2018
  7. 数据结构-单链表实现
  8. 将表中的数据自动生成INSERT、UPDATE语句
  9. 这款神秘的移动端OCR引擎,如何做到“所见即所得”?
  10. 常用转义符的使用 java 0133
  11. 声明 styleable 与声明 attr 的区别
  12. AngularJS------Error: Cannot find module '@angular-devkit/core'
  13. 解决ajaxSubmit无法传递自动回填和下拉框的数据
  14. asp.net饭店点菜管理
  15. 洛谷 P2873 [USACO07DEC]泥水坑Mud Puddles
  16. Typora 语法结构与功能
  17. Unity 利用射线实现弹孔效果
  18. 推荐视频:神奇的大脑 之 三个错觉演示
  19. python成语接龙代码_实现成语接龙(Python)
  20. 【亲测有用】腾讯会议共享PPT,并开启演讲者模式

热门文章

  1. 云计算之云容灾备份入门
  2. 区块链分布式存储ipfs值得投资么,如何鉴别Filecoin挖矿平台是否靠谱?
  3. 无线路由器怎样改成AP模式
  4. python标准库os中的方法exists,Python标准库os中的方法exists()可以用来测试给定路径的文件是否存在。...
  5. C++头文件【iomanip】的简要讲解
  6. 一个现在晕电梯的辣鸡写的OO总结
  7. 感量越大抑制频率约低_工程师不可不知的开关电源关键设计(三)(4)
  8. 如何告别职场菜鸟,成为职场“老司机”!
  9. 用Ftype命令让病毒白白运行
  10. 漏洞扫描器御剑下载安装与使用