如何在 VB 6.0 无边框窗体上添加弹出菜单?
每次我添加菜单时,边框都会重新出现,即使BorderStyle
设置为vbBSNone
并且菜单被隐藏。
这是可行的,但有点不满意(对我来说)。通过在表单中包含任何菜单属性,边框将默认恢复为可见。但是,有一些解决方法:
1)我认为你会喜欢的方法包括制作你永远不会真正“使用”或看到的第二种形式。将菜单放在第二个窗体上,然后从您实际要使用的窗体中调用该菜单。假设您Form_MouseDown
用来调用它,这里是代码:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And vbRightButton Then PopupMenu Form2.mnuYourMenu
End sub
但是,您必须记住从内存中卸载第二个表单。
2)另一种方法,仅使用第一个表单,将表单设置ControlBox
为False
并将Caption
属性留空。当设置为 0 时,这会“删除”边框BorderStyle
......我将删除放在引号中,因为它会不幸留下一条 1 像素的黑线。它看起来不错,但对您来说可能不是一个可行的解决方案。
3)最后一种方法,我读到但自己没有做任何事情,是使用CreatePopupMenu
API,在http://allapi.mentalis.org/apilist/CreatePopupMenu.shtml
希望这可以帮助!
为了其他来这里寻找这个问题的答案的人的利益,这里有一个非常简单的 API 方法可以工作:
声明:
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Const GWL_STYLE = -16, WS_BORDER = &H800000
在 Form_Load 中:
SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) And Not WS_BORDER
这个有可能。将窗体的 BorderStyle 设置为 None,将 Caption 设置为空字符串,ControlBox、MaxButton MinButton 设置为 False。然后,使用 VB6 的菜单编辑器,创建一个名为“mnuPopup”的顶级菜单,并将其 Visible 属性设置为 False。将菜单的其余部分创建为该顶级菜单的子菜单,并将其 Visible 属性设置为 True。然后,在表单的代码中,您可以使用 显示菜单PopupMenu menuPopup
。它看起来像这样: