鱼C论坛

 找回密码
 立即注册
查看: 1678|回复: 1

CreateWindowEx创建树型框问题

[复制链接]
发表于 2019-10-6 21:32:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zxczxc5484 于 2019-10-6 22:56 编辑

工具:TC简单软件,参考资料:https://blog.csdn.net/yiruirui0507/article/details/6337140和鱼C下载的win32.hlp

思路:CreateWindowExW创建框体-----增加新项用TV_INSERTSTRUCT 结构向树视图控件添加新项的信息-----最后通过SendMessage向框体发送消息TVM_INSERTITEM和l参数=TV_INSERTSTRUCT 结构体指针

这是创建树型框的代码:
变量 WS_BORDER = #00800000
变量 WS_VSCROLL = #00200000
变量 WS_VISIBLE = #10000000
变量 WS_CHILD = #40000000
变量 Style = WS_BORDER + WS_VSCROLL + WS_VISIBLE + WS_CHILD
变量 树型框句柄 = 动态库调用("user32.dll", "int", "CreateWindowExW", "int", WS_EX_CLIENTEDGE, "wchar *", "SysTreeView32", "wchar *", "", "int", Style, "int", 10, "int", 10, "int", 300, "int", 430, "int", 父句柄, "int", 0, "int", 0, "int", 0)//不知道这里有没有错误,反正框体是出来了

创建后效果如下:
创建图.bmp

接下来是给框体增加项目:代码如下,不太理解这些,基本都是看文档猜的,代码如下:
变量 TVM_INSERTITEMA = 4352 //#1100 插入项目A
变量 TVIF_TEXT = 1 //#1 文本
变量 TV_INSERTSTRUCT = 数组()
变量 TVI_ROOT = 4294901760
变量 TVI_FIRST = 4294901761
变量 项目名 = "我是项目1"
变量 字符串指针 = 获取变量指针(项目名)
//下面是定义TVINSERTSTRUCT结构体

TV_INSERTSTRUCT["hParent"] = 数组("int" = "1", "value" = TVI_ROOT)//父项目的句柄。如果该值为TVI_ROOT value或NULL,该项目插在树型视图的根部
TV_INSERTSTRUCT["hInsertAfter"] = 数组("int" = "1", "value" = TVI_FIRST)//插入在项目的句柄下面的值:TVI_FIRST ==> 插在列表的头部。TVI_LAST ==> 插在列表的尾部。TVI_SORT ==> 按字母顺序插入。

//WIN32文档对TVINSERTSTRUCT结构体item成员的描述大概意思是这个是设置树型框属性的东西,猜测是TV_ITEM消息结构体,结构体参数定义如下:有很大程度上这些东西我搞错了,完全没搞明白

TV_INSERTSTRUCT["mask"] = 数组("int" = "1", "value" = TVIF_TEXT)//指定有效成员变量
TV_INSERTSTRUCT["hItem"] = 数组("long" = "1", "value" = 0)//引用项句柄
TV_INSERTSTRUCT["state"] = 数组("int" = "1", "value" = 0)//指定项当前状态的变量
TV_INSERTSTRUCT["stateMask"] = 数组("int" = "1", "value" = 0)//指定项有效状态的变量
TV_INSERTSTRUCT["pszText"] = 数组("char *" = "1", "value" = 字符串指针)//项名字符串指针
TV_INSERTSTRUCT["cchTextMax"] = 数组("int" = "1", "value" = 0)//缓冲区大小
TV_INSERTSTRUCT["iImage"] = 数组("int" = "1", "value" = 0)//指定图像列表
TV_INSERTSTRUCT["iSelectedImage"] = 数组("int" = "1", "value" = 0)//指定图像索引
TV_INSERTSTRUCT["cChildren"] = 数组("int" = "1", "value" = 0)//指示项是否具有关联子项的标志。如果项具有一个或多个子项,则为1;否则为零。
TV_INSERTSTRUCT["lParam"] = 数组("long" = "1", "value" = 0)//要与项关联的32位值
变量 结构体指针= 获取变量指针(TV_INSERTSTRUCT)//不知道这样写对否,直接用的变量指针,看了下TC也只有这个API能用
    调试输出(结构体指针=)
调试输出(dllcall("user32.dll", "int", "SendMessageA", "int", 树型框句柄, "int", TVM_INSERTITEMA, "int", 0, "int", 结构体指针=))//最后用SendMessage把消息TVM_INSERTITEMA发送给树型框句柄,W参数为0,L参数为TVINSERTSTRUCT的结构体指针

最后执行效果如下:
添加项图.bmp
如图只多了一个很小的矩形东东,没有文本显示

疑问:创建树型框是否写对
          增加新项目结构体相关成员是否写对
          网上查到树形框还有风格类型如:(这些我都没用到,不知道用到哪里)
树形视图风格介绍:
TVS_HASBUTTONS
在父亲项目中显示+或-,当点击该符号的时候可以展开或者收起该父亲项目下面的儿子孙子项目,如果想在根目录下也有此符号,就要指定TVS_LINESATROOT的style.
TVS_HASLINES
层次之间用线条来连接
          其它错误写法。
          树形框消息处理机制
麻烦对TC熟悉或者能看懂的大神给个例子或者指出问题所在,万分感谢,没多少win32编程基础,今天研究一天了,换了好几种姿势都没成功,看我用的工具就知道了,另外易语言例子也能看懂。




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-6 22:58:36 | 显示全部楼层
本帖最后由 zxczxc5484 于 2019-10-6 23:00 编辑

问题已经解决,我这有个gdi真彩自绘树形框源码,准备放弃用真彩的,结果发现gdi里面的树形框代码有这个例子,应该用“结构体申请内存”,之前老申请失败,应该还是结构体没写正确的原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 23:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表