如何在VB 6.0无边框表单上添加弹出菜单?
每次添加菜单时,即使BorderStyle
设置为vbBSNone
并且菜单被隐藏,边框也会重新出现。
答案 0 :(得分:5)
这是可行的,但有些不满意(对我而言)。通过在表单中包含任何菜单属性,边框将默认返回可见。但是,有一些解决方法:
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
属性留空。当BorderStyle
设置为0时,这会“删除”边框...我将删除引号放在引号中,因为它会遗漏一条1像素的黑线。它看起来并不坏,但它可能不适合你。
3)最后一种方式,我读到但未对自己做过任何事情,将使用在http://allapi.mentalis.org/apilist/CreatePopupMenu.shtml找到的CreatePopupMenu
API
希望这有帮助!
答案 1 :(得分:0)
这是可能的。将窗体的BorderStyle设置为None,Caption设置为空字符串,ControlBox,MaxButton MinButton设置为False。然后,使用VB6的菜单编辑器,创建名为“mnuPopup”的顶级菜单,并将其Visible属性设置为False。创建菜单的其余部分作为该顶级菜单的子菜单,将其Visible属性设置为True。然后,在表单的代码中,您可以使用PopupMenu menuPopup
显示菜单。它看起来像这样:
答案 2 :(得分:0)
为了此处寻找这个问题答案的其他人的利益,这是一个非常简单的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