利用API函数向TreeView控件发送消息
版权声明:可以任意转载,转载时请务必以超链接形式标明如下文章原始出处和作者信息及本声明 作者:xixi 出处:http://blog.csdn.net/slowgrace/archive/2009/04/15/4076404.aspx 1、SendMessage 向TreeView控件发送消息通常要用API的sendmessge函数,这需要在标准模块里添加声明如下:
这上面两个声明,区别只在最后一个参数。Tiger_Zhao说,前一种是自动取地址,通常对应指针类型的参数。后一种直接传值,通常对应非指针类型的参数。通常,如果MSDN 的参数类型有*,就用前一种。而后一种,实际上可以对应于下面这种调用: Call SendMessage(hTvw,TVM_EXPAND,TVE_EXPAND,ByVal hItem)。在这篇文章里有一个具体的例子。 2、获得TreeView Node对应的HItem 发消息时,常常需要提供的参数之一是TreeView Node对应的HItem。可以像下面这样获得:
不过,上面的方法中要改变treeview的当前节点。如果不希望改变当前节点的话,可以参考这篇文章里的办法:http://blog.csdn.net/slowgrace/archive/2009/04/16/4083667.aspx 3、向TreeView发送消息使Expand事件发生 Call SendMessage(treX.hwnd,ByVal GetHTreeItem(nodX,treX)) 4、向TreeView发送消息使NodeClick事件发生 在这个帖子里http://blog.csdn.net/slowgrace/archive/2009/01/14/3772557.aspx,我尝试了发NM_CLICK通知消息的办法,但是不能激发NodeClick事件。解决的办法是找到节点的坐标,向指定坐标发送鼠标down和up消息,参见这篇文章http://blog.csdn.net/slowgrace/archive/2009/04/16/4084299.aspx。不过,这个办法是投递消息,如果需要直接发送消息那种效果,暂时还没找到什么好办法。 5、一些常用的工具 Spy++可用来实时观察窗口句柄和消息。APIVIEWER可用来帮你生成用于VB的API函数声明、类型声明、常量声明。 6、了解和使用API消息的方法 在http://msdn.microsoft.com/en-us/library/cc656648(VS.85).aspx里有所有的treeview控件相关消息。一般在消息的说明里会以表格的形式说明相关的参数。表格分成两列,左列是参数列表,右列是注释。比如像下面这句:
Tiger_Zhao解释说,它说明这个名为lParam的参数的用法。它的类型是(LPARAM),所以右边的注释首先有个(LPARAM),这是为了与参数类型匹配进行的强制类型转换,不用管(在VB 中就是Long);而(HTREEITEM) 说明这个参数期待的是一个句柄hItem,句柄在VB中也是Long。 7、一些常用到的常数
参考链接: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |