电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 图形图象-> Authorware教程
得知目前mouse所指的menuitem是哪一个_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
请先查阅有BitMap的Menu取得Menu的相关知识,再查如何拦截ComboBoxMouseMove的SubClass之技巧一些商业软件中,当滑鼠指向某个MenuItem时,在表单的底部STATUSBAR中会显示有该Item功能的简要说明。而VB5中有关Menu的捕捉事件只有一个CLICK,那该如何做呢。其实当选择了Menu後,Mouse在MenuSubMenuMenuItem上移来移去时,会产生WM_MENUSELECT的Message给Menu所在的表单,而其wParam的LowWord有两个意义,如果Mouse指到的Item之下还有子Menu,该LowWordofwParam指的是该Item是第几个SubMenu,而lParam便是Menu的Handle;相反的,如果Mouse所指的Item底下没有PopupMenu了,那LowWordofwParam指的是MenuID,而lParam是hSubMenu。

档案编辑选项-->hMenu(功能表,Menu)
-------
|复制|--------->hSubMenu(子功能表,SubMenu)
|贴上|
|减下------------->MenuID(功能表项目,MenuItem)
||
-------

所以了,这就得使用SubClass的技巧,取得WM_MENUSELECT的Message,进而得知到底是选到了哪一个MenuItem。当然了,我们可以使用GetMenuGetSubMenuGetMenuItemID等API来得知功能表上每一个项目的hMenuhSubMenuMenuID,如此一来,和WM_MENUSELECT讯息所取得的lParamwParam做做比较,就可得知到底选上了哪一个,而本例则是使用GetMenuString取得MenuItem的title,如果您的MenuItems没有相同的title,也不失一得知方式。

以下在form,请自行加Menu於Form上
PrivateSubForm_Load()
DimretAsLong
hMenu=GetMenu(Me.hwnd)

记录原本的WindowProcedure的位址
preWinProc=GetWindowLong(Me.hwnd,GWL_WNDPROC)
设定Combo1的windowProcedure到wndproc
ret=SetWindowLong(Me.hwnd,GWL_WNDPROC,AddressOfwndproc)
EndSub

PrivateSubForm_Unload(CancelAsInteger)
DimretAsLong
取消Message的截取,而使之又只送往原来的WindowProcedure
ret=SetWindowLong(Me.hwnd,GWL_WNDPROC,preWinProc)
EndSub


以下在.Bas
以下程式在module1.bas
DeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"_
(ByValhwndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong
DeclareFunctionGetWindowLongLib"user32"Alias"GetWindowLongA"_
(ByValhwndAsLong,ByValnIndexAsLong)AsLong
DeclareFunctionCallWindowProcLib"user32"Alias"CallWindowProcA"_
(ByVallpPrevWndFuncAsLong,ByValhwndAsLong,ByValMsgAsLong,_
ByValwParamAsLong,ByVallParamAsLong)AsLong
DeclareFunctionGetMenuStringLib"user32"Alias"GetMenuStringA"(ByValhMenuAsLong,ByValwIDItemAsLong,ByVallpStringAsString,ByValnMaxCountAsLong,ByValwFlagAsLong)AsLong
DeclareFunctionGetMenuLib"user32"(ByValhwndAsLong)AsLong
DeclareFunctionGetSubMenuLib"user32"(ByValhMenuAsLong,ByValnPosAsLong)AsLong

PublicConstGWL_WNDPROC=(-4)
PublicConstWM_MENUSELECT=&H11F
PublicConstMF_BYCOMMAND=&H0&
PublicConstMF_BYPOSITION=&H400&

PublichMenuAsLong
PublicpreWinProcAsLong
PrivateTypetLong
llAsLong
EndType
PrivateTypeTwoWord
LowWordAsInteger
HiWordAsInteger
EndType
PublicFunctionwndproc(ByValhwndAsLong,ByValMsgAsLong,_
ByValwParamAsLong,ByVallParamAsLong)AsLong
DimMenuItemStrAsString,SubMenuStrAsString
DimhSubmenuAsLong,MenuIdAsLong,iAsLong
DimtmplAstLong,tmptAsTwoWord
以下程式会截取WM_MENUSELECT处理完後,再将之送往原来的WindowProcedure
IfMsg=WM_MENUSELECTThen
SubMenuStr=String(255,0)
MenuItemStr=String(255,0)

tmpl.ll=wParam
LSettmpt=tmpl
MenuId=tmpt.LowWord

hSubmenu=GetSubMenu(lParam,MenuId)
IfhSubmenu=0Then表示该item之下没有popupMenu了
CallGetMenuString(lParam,MenuId,MenuItemStr,256,MF_BYCOMMAND)
MenuItemStr=Left(MenuItemStr,InStr(1,MenuItemStr,Chr(0))-1)
Debug.Print"正在MenuItem" MenuItemStr
Else
CallGetMenuString(hMenu,hSubmenu,SubMenuStr,256,MF_BYCOMMAND)
SubMenuStr=Left(SubMenuStr,InStr(1,SubMenuStr,Chr(0))-1)
Debug.Print"正在PopUpMenu" SubMenuStr
EndIf
EndIf
将之送往原来的WindowProcedure
wndproc=CallWindowProc(preWinProc,hwnd,Msg,wParam,lParam)
EndFunction->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·在authorware中灵活运用提示文本_authorware教程
·a016-authorware中checked系统变数的用法_authorware教程
·authorware 6.0 技巧与实例(2)准备工作_authorware教程
·authorware 6.0 技巧与实例(3)移动的标题文字_authorware教程
·authorware 6.0 技巧与实例(5)选择题_authorware教程
·利用authorware动态绘制二次函数曲线图_authorware教程
·authorware 6.0 技巧与实例(4)给电视片配音_authorware教程
·authorware 6.0 技巧与实例(6)自定义按钮_authorware教程
·authorware 6.0 技巧与实例(7)拼图游戏_authorware教程
·authorware 6.0 技巧与实例(9)标准下拉菜单_authorware教程

最新文章
·photoshop通道图层转换黑白照片_photoshop教程
·photoshop设计精美游戏包装盒_photoshop教程
·用photoshop打造水彩风格eva美女凌波丽_photoshop教程
·fireworks滤镜制作喷溅效果_fireworks教程
·fireworks去照片红眼功能使用详解_fireworks教程
·photoshop实例教程:做蓝色水波纹理_photoshop教程
·在windows xp中创建新的iis站点的命令_windows xp
·authorware中自动擦除flash动画_authorware教程
·authorware插入文本的四种方法_authorware教程
·authorware调整动画尺寸_authorware教程


 
 


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

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

版权所有 西部数码(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号