在无边框表单上有一个弹出菜单

时间:2011-03-21 10:28:49

标签: vb6 popupmenu

如何在VB 6.0无边框表单上添加弹出菜单?

每次添加菜单时,即使BorderStyle设置为vbBSNone并且菜单被隐藏,边框也会重新出现。

3 个答案:

答案 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显示菜单。它看起来像这样:

enter image description here

答案 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