各位前辈好,小弟想问一个问题,这个问题困扰我很久,还望各位前辈照顾小弟,给个方法。
在VB6中,我通过遍历法已知窗体上所有菜单的句柄、标题、以及层次结构。
但是我不知道怎么获取指定菜单项的名称。
比如某个菜单项:
Name=mnuFile
Caption="文件"我能得到“文件”这个标题,但是无法得到mnuFile这个名称。
我的思路是通过菜单句柄来获取这个菜单对象的名称。
找了很多API函数的例子,但是都无法获取。程序是我的程序,不是外部EXE。
菜单的名称我也知道,但是我需要通过函数来获取。我只能通过GetMenu这一类函数来获取句柄,但是怎么通过句柄获取“mnuFile”这样的名称?不要说传递对象作为参数,如果是这个,就没有烦恼了。
在VB6中,我通过遍历法已知窗体上所有菜单的句柄、标题、以及层次结构。
但是我不知道怎么获取指定菜单项的名称。
比如某个菜单项:
Name=mnuFile
Caption="文件"我能得到“文件”这个标题,但是无法得到mnuFile这个名称。
我的思路是通过菜单句柄来获取这个菜单对象的名称。
找了很多API函数的例子,但是都无法获取。程序是我的程序,不是外部EXE。
菜单的名称我也知道,但是我需要通过函数来获取。我只能通过GetMenu这一类函数来获取句柄,但是怎么通过句柄获取“mnuFile”这样的名称?不要说传递对象作为参数,如果是这个,就没有烦恼了。
解决方案 »
- 请教各位问题,请看看代码。。。
- VB 能动态创建一个数组吗,谢谢!!!
- word中如何用vb语言判断当前光标是否到达文件末尾?
- 如何取得html中标记的 name id 属性值
- 解决点饥太快问题
- cad软件中,图形(直线,圆,多边形等)的拾取是怎么样实现的?以及图象变换的问题
- 急!急!急!如何用VB代码将“IE工具-=>ie 选项-=>高级-=>最下面的"总是以utf-8方式发送url"”项取消
- 如何制作可以设计的控件箱,与vb中的控件箱相似的功能?
- 纸张大小设置问题,大侠请进!
- DataReport问题
- VB中能否交换Collectionz中两个元素的位置
- 关于VB2005 SaveFileDialog的问题!
2,你的意思是不是,你这窗口上这些菜单,并不是用那些API创建的,而是你自己在IDE中用"菜单编辑器"创建的?
1,你说的"通过遍历法已知窗体上所有菜单的句柄、标题、以及层次结构"是指用GetMenu等API获得的吗
----完全正确
2,你的意思是不是,你这窗口上这些菜单,并不是用那些API创建的,而是你自己在IDE中用"菜单编辑器"创建的?
----完全正确我现在已经解决这个问题,用了一个笨办法,就是用 FOR EACH iControl IN Form.Controls
然后用 IF TYPEOF iControl IS MENU iControl.Name
因为我发现VB的这个逻辑判断出来的菜单顺序其实和树的先序遍历得到的顺序是一样的。
所以我在类模块中定义了一个结构体 TYPE
Type TypeName
cID=String '菜单名称
hwnd=Long '句柄
end type再定义这个结构体的数组
先用For Each的方法将Name传入到数组中的cID成员中
然后再用遍历法将菜单的Hwnd传入到数组的hwnd成员中获得的结果是正确的。
如果大家有更好的方法还望多多赐教。 谢谢
就是Check属性。而不是什么样式。
菜单的句柄还是取名
hMenu=Long '句柄
一类的,以后维护时方便些.
有些人就干脆连创建菜单也不用VB6自带的菜单编辑器了.
不过那样的话,响应菜单事件一般要用子类化处理,会麻烦一些.
获取菜单信息用GetMenuItemInfo
http://allapi.mentalis.org/apilist/GetMenuItemInfo.shtml