【发布时间】:2011-05-12 23:07:30
【问题描述】:
我正在使用 Visual Basic 6(请不要笑),我想在运行时根据“顶级”菜单项之一(例如“文件”、“编辑”、“视图”)。
不幸的是,VB 的 Menu 控件(即这些“文件”、“编辑”等的控件类型)没有任何属性,如“顶部”、“左侧”、“高度”或“宽度”。
我可以进行试验,观察它,最终得出我将硬编码的数字,但出于各种原因,我更希望代码能够真正确定控件的位置。
我在想也许有一些 Windows API 调用可以用来确定 Menu 控件的位置?
提前致谢。
编辑:如果重要的话,这是在 MDI 表单上。
编辑#2:
好的,回答我自己的问题:
可以通过GetMenuBarInfo函数获取主菜单栏上各项的位置,如:
Dim mbi as MENUBARINFO
mbi.cbSize = LenB(mbi)
GetMenuBarInfo Me.hWnd, OBJID_MENU, lMenuNumber, mbi
其中“lMenuNumber”是第一个(例如“文件”)的 1,第二个(例如“编辑”)的 2,等等。
那个 mbi 结构有一个 rcBar 成员,它是那个菜单项所在矩形的坐标。
不幸的是,它是相对于屏幕的绝对坐标,而不是相对于 MDI 表单。因此,获取您感兴趣的 mbi 和第一个,然后减去。
另外,在 mbi 中给出的位置以像素为单位,因此可以根据需要转换为缇或其他值。
【问题讨论】:
-
按位置是指第一、第二等还是它的坐标?
-
坐标。我想弄清楚顶部,左侧等。
-
请不要这样做。将控件放在菜单栏以外的位置。菜单栏用于菜单。
-
谢谢大卫,但我放在那里的控件是一个菜单。由于 VB6 的固有限制,我正在用第三方弹出菜单控件替换 VB6 的内置菜单。我需要弄清楚在哪里告诉弹出菜单弹出打开,以便它与内置菜单位于同一位置。
-
我实际上确实试图将其发布为答案,并被告知新用户在八小时后才能回答他们自己的问题。所以,我改为编辑我的问题。不过,我现在会再次尝试发布它。
标签: windows winapi vb6 menu position