4

VB 6.0のボーダレスフォームにポップアップメニューを追加するにはどうすればよいですか?

メニューを追加するたびに、BorderStyleがに設定されvbBSNoneていてメニューが非表示になっている場合でも、境界線が再表示されます。

4

3 に答える 3

6

それは実行可能ですが、(私にとっては)やや不満です。フォームにメニュー プロパティを設定すると、境界線がデフォルトで表示されるようになります。ただし、いくつかの回避策があります。

1) あなたが好むと思う方法は、実際には決して「使用」したり見たりすることのない 2 番目のフォームを作成することです。その 2 番目のフォームにメニューを配置し、実際に使用するフォームからそのメニューを呼び出します。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 番目のフォームをメモリからアンロードすることを忘れないでください。

2) 最初のフォームのみを使用する別の方法は、フォームのControlBoxtoを設定しFalseCaptionプロパティを空白のままにすることです。が 0 に設定されている場合、これは境界線を「削除」しBorderStyleます...残念ながら 1 ピクセルの黒い線が残るため、removes を引用符で囲みます。見た目は悪くありませんが、実行可能なソリューションではない可能性があります。

3) 私が読んだものの、自分で何もしていない最後の方法は、http://allapi.mentalis.org/apilist/CreatePopupMenu.shtmlCreatePopupMenuにあるAPIを使用することです。

お役に立てれば!

于 2011-03-21T14:49:00.577 に答える
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
于 2012-04-17T19:05:25.717 に答える
-1

これは可能です。フォームの BorderStyle を None に、Caption を空の文字列に、ControlBox を、MaxButton MinButton を False に設定します。次に、VB6 のメニュー エディターを使用して、「mnuPopup」という名前の最上位メニューを作成し、その Visible プロパティを False に設定します。メニューの残りの部分をその最上位メニューのサブメニューとして作成し、それらの Visible プロパティを True に設定します。次に、フォームのコードで、 を使用してメニューを表示できますPopupMenu menuPopup。次のようになります。

ここに画像の説明を入力

于 2011-03-21T15:05:25.003 に答える