是的,这是可能的。你可以通过很少的代码来做到这一点。首先,您需要创建两个结构。
从结构中输入 os_point
长l_x
长l_y
结束类型
从结构中输入 os_tvhittestinfo
os_point str_pt
长 l_flags
长 l_hiite
结束类型
然后声明这些实例变量
//实例变量
公开:
常量 uint TVM_HITTEST = 4369
常量 uint TVHT_ONITEMSTATEICON = 64
受保护:
布尔值 ib_stateclick = FALSE
布尔 ib_stateclickin = FALSE
长 il_handle
然后你需要声明本地外部函数
//局部外部函数
FUNCTION long HitMsg(long hWindow, uint uMsg, long wParam, REF OS_TVHITTESTINFO lParam) LIBRARY "user32.dll" ALIAS FOR SendMessageA
在 Treeview 控件鼠标移动事件上编写此代码
//Treeview 鼠标移动事件
OS_TVHITTESTINFO lstr_tvhittest
il_handle = 句柄(这个)
// 获取状态图标是否被点击的信息。
lstr_tvhittest.str_pt.l_x = UnitsToPixels(xpos, XUnitsToPixels!)
lstr_tvhittest.str_pt.l_y = UnitsToPixels(ypos, YUnitsToPixels!)
// 发送消息以检索鼠标指向的项目的句柄。
HitMsg(il_handle, TVM_HITTEST, 0, lstr_tvhittest)
// 如果我们超过状态复选框,则设置标志。
IF lstr_tvhittest.l_hItem 0 THEN
ib_stateclick = (lstr_tvhittest.l_flags = TVHT_ONITEMSTATEICON)
如果结束
然后在 Treeview Clicked 事件上编写以下代码
//Treeview点击事件
TreeviewItem l_tviold
this.GetItem(handle, l_tviold)
如果 ib_stateclick THEN
如果 l_tviold.StatePictureIndex=1 那么
//复选框已选中
Messagebox('','Check Box Checked on '+String(handle))
其他
//复选框未选中
Messagebox('','Check Box Un-Checked on '+String(handle))
如果
结束
如果结束
完成。从
https://groups.google.com/forum/#!topic/sybase.public.powerbuilder.general/YOKf5OwjKI0
收集的信息
问候
拉杰