2011-03-21 76 views
3

如何在VB 6.0無邊界形式上添加彈出式菜單?有無邊界形式的彈出式菜單

每當我添加一個菜單時,即使當BorderStyle設置爲vbBSNone並且菜單被隱藏時,邊框會再次出現。

+0

什麼是邊界是什麼樣子?虛線?你能發佈圖片嗎? – 2011-03-21 11:23:10

+0

我的意思是一個VB窗體的邊框以及標題欄。 – 2011-03-21 11:27:24

+0

Hhhmmm ...你可以有一個標題欄無邊界形式?我不這麼認爲...... – 2011-03-21 11:30:50

回答

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)另一種方法,只使用第一種形式,將設置窗體的ControlBoxFalse,並將Caption屬性留爲空白。當BorderStyle設置爲0時,這個「刪除」邊框...我將刪除語句放在引號中,因爲它不幸留下了1像素的黑線。它看起來不錯,但它可能不是一個可行的解決方案。

3)最後一種方法,這是我讀到,但還沒有對自己做了什麼,會使用CreatePopupMenu API,發現在http://allapi.mentalis.org/apilist/CreatePopupMenu.shtml

希望這有助於!

+0

這是我預期的最完美的答案。謝謝。 – 2011-03-21 16:06:19

+0

@ Coding-Freak:很高興幫助 – erekalper 2011-03-21 16:33:52

+0

歡迎你。在那裏再次尋求幫助,我也會在那裏...... – 2011-03-21 16:37:57

0

這是可能的。將窗體的BorderStyle設置爲None,Caption爲空字符串,ControlBox,MaxButton MinButton爲False。然後,使用VB6的菜單編輯器,創建一個名爲「mnuPopup」的頂級菜單,並將其Visible屬性設置爲False。將該菜單的其餘部分創建爲該頂級菜單的子菜單,並將其Visible屬性設置爲True。然後,在窗體的代碼中,您可以使用PopupMenu menuPopup顯示菜單。它看起來像這樣:

enter image description here

+0

這會使邊框變回可見狀態。 – 2011-03-21 16:07:05

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 
+0

請注意,這會做一些不同的事情,因爲它會改變客戶區域的有效位置(VB會移動表單以考慮邊框/標題)。您還需要刪除'WS_THICKFRAME'和'WS_DLGFRAME'樣式以最終沒有邊框。 – Deanna 2015-09-16 14:17:12