电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 办公软件-> Wps Office
sendmessage函数巧应用_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
在这一期的SendMessage函数应用中,我将向大家介绍如何利用消息函数来扩展树型列表(TreeView)控件的功能相信对于树型列表控件大家十分的熟悉,典型的应用就是Windows资源管理器中的目录列表。在VB中,树型列表控件包含在MicrosoftWindowsCommonControl6.0(也可能是5.0,视你的VB或者系统版本而定)中。在WindowsAPI中,有一系列的以TVM_开头的消息值,这些消息就是扩展树型列表控件所特定的消息值,下面向大家介绍其中的一些应用。
1、设置树型列表控件的背景颜色
首先做如下的定义:
PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong
ConstTV-FIRST=&H1100
ConstTVM-SETBKCOLOR=TV_FIRST+29
然后再作如下调用:
CallSendMessage(TreeView1.hwnd,TVM-SETBKCOLOR,0,RGB(255,0,0))
上面的SendMessage调用将TreeView1的背景颜色设置为红色。
大家可能注意到了。在上面的Sendmessage函数定义中,我们将lParam定义为ByVallParamAsLong,而不是象前面的那些范例那样定义为Any或者String类型,关于这个问题,我会在最后的一章中做介绍。
2、设置树型列表控件标题行高度
利用TVM_SETITEMHEIGHT消息可以设定控件的标题行的高度,该消息的定义及调用方法如下:
定义:
ConstTV_FIRST=&H1100
ConstTVM-SETITEMHEIGHT=TV_FIRST+27
PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
调用:
CallSendMessage(TreeView1.hwnd,TVM-SETITEMHEIGHT,60,0)
上面的代码将TreeView1的标题行高度设置到60像素高
3、为树型列表控件中不同的标题行设置不同的提示
在第一期的ListBox控件介绍中,我向大家介绍了如何为列表中的每一个标题行设置不同的提示(ToolTips),在这里为要向大家介绍如何为树型列表控件中的每一个标题设置不同的提示。
同ListBox控件不通,树型列表控件中并没有根据光标位置获得标题行索引的消息,我们需要另外想办法。在TVM类消息中有一个TVM_HITTEST消息,发送该消息可以检测控件表面上的某一点,如果该点位于一个标题上,则返回该标题的句柄。而利用TVM_GETITEM消息,则可以根据标题句柄返回该标题行的文本。所以结合利用这两个消息可以获取光标所在标题行的标题文本。具体的范例代码如下:
OptionExplicitPrivateTypeTPoint
xAsLong
yAsLong
EndType
PrivateTypeTVHITTESTINFO
ptAsTPoint
flagsAsLong
hItemAsLong
EndType
PrivateTypeTVITEM
maskAsLong
HTreeItemAsLong
stateAsLong
stateMaskAsLong
pszTextAsLong
cchTextMaxAsLong
iImageAsLong
iSelectedImageAsLong
cChildrenAsLong
lParamAsLong
EndType
ConstTV-FIRST=&H1100
ConstTVM_HITTEST=TV-FIRST+17
ConstTVM_GETITEM=TV-FIRST+12
ConstTVHT-ONITEMLABEL=&H4
ConstTVIF-TEXT=&H1
ConstGMEM-FIXED=&H0
PrivateDeclareFunctionSendMessageRefLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
PrivateDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"(ByValDestinationAsString,ByValSourceAsLong,ByValLengthAsLong)
PrivateDeclareFunctionGlobalAllocLib"kernel32"(ByValwFlagsAsLong,ByValdwBytesAsLong)AsLong
PrivateDeclareFunctionGlobalFreeLib"kernel32"(ByValhMemAsLong)AsLong
DimhItemPrvAsLong
PrivateSubForm_Load()
DimndXAsNode
`加入若干Item
SetndX=TreeView1.Nodes.Add(,,"R","Root")
SetndX=TreeView1.Nodes.Add("R",tvwChild,"Key1","Node1")
SetndX=TreeView1.Nodes.Add("Key1",tvwChild,"SubKey1","SubNode1")
SetndX=TreeView1.Nodes.Add("SubKey1",tvwChild,"SubKeys1","SubNode1")
SetndX=TreeView1.Nodes.Add("Key1",tvwChild,"SubKey2","SubNode2")
SetndX=TreeView1.Nodes.Add("Key1",tvwChild,"SubKey3","SubNode3")
SetndX=TreeView1.Nodes.Add("Key1",tvwChild,"SubKey4","SubNode4")
EndSub
PrivateSubTreeView1_MouseMove(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
DimptAAsTPoint
DimtfAsTVHITTESTINFO
DimtvAsTVITEM
DimhStrAsLong
DimhItemAsLong
DimastrAsString*1024
Dimbstr
OnErrorGoToerrLab
`获得当前光标所在的位置坐标
ptA.x=Int(x/Screen.TwipsPerPixelX)
ptA.y=Int(y/Screen.TwipsPerPixelY)
tf.pt=ptA
tf.flags=TVHT_ONITEMLABEL
`获得光标所在的Item的句柄
hItem=SendMessageRef(TreeView1.hwnd,TVM_HITTEST,0,tf)
`如果未获得句柄或者同上一次是同一个Item的句柄则退出
If((hItem<=0)Or(hItem=hItemPrv))ThenExitSub
hItemPrv=hItem
`分配一定的内存空间用以存储Item的标题
hStr=GlobalAlloc(GMEM-FIXED,1024)
IfhStr>0Then
tv.mask=TVIF_TEXT
`获取标题文本
tv.HTreeItem=hItem
`Item句柄
tv.pszText=hStr
tv.cchTextMax=1023
`发送TVM_GETITEM获得标题文本
CallSendMessageRef(TreeView1.hwnd,TVM-GETITEM,0,tv)
`将标题文本拷贝到字符串astr中
CopyMemoryastr,hStr,1024
bstr=Left$(astr,(InStr(astr,Chr(0))-1))
TreeView1.ToolTipText=bstr
`释放分配的内存空间
GlobalFreehStr
EndIf
ExitSub
errLab:
ResumeNext
EndSub
运行上面的程序,当光标在TreeView1上面移动时,TreeView1的ToolTips就会根据光标所在的不同标题行而变动。
以上程序在Win98、Win2000,VB6下运行通过->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·神奇!wps画的鸡蛋以假乱真_wps office
·巧解燃眉之急:word不能打开wps文档的问题_wps office
·photoshop蒙版巧为黑白美女照片上色_photoshop教程
·找回金山wps文字的报表功能_wps office
·photoshop简单打造一张不错的旅游明信片_photoshop教程
·在wps文字中快速清除文档的多余空行_wps office
·wps里也能轻松做出带圈字符_wps office
·让wps文字中文繁简转换更聪明一些_wps office
·玩转wps演示中的“隐藏幻灯片”功能_wps office
·用函数在wps表格中快速录入字母序列_wps office

最新文章
·photoshop打造数码照片“像素块”特效_photoshop教程
·妙用wps表格2005完成新生分班工作_wps office
·用wps快速整理中英混排的网页文字_wps office
·wps文档也能保存为默认的doc格式_wps office
·用wps表格快速制作拼音田字格的方法_wps office
·photoshop照片处理:表现超酷的金色色调_photoshop教程
·提高金山wps使用效率:双击_wps office
·为wps表格2005添加“复制合并”功能_wps office
·用wps绘制个性化信笺纸_wps office
·photoshop简单制作玻璃板特殊效果_photoshop教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号