Visual Basic Tips


システムメニューの削除(API)


システムメニューを削除すると、メニューに対応する機能も制限され、実際に移動できなくなったりサイズ変更できなくなったりします。削除するにはDeleteMenu関数を使用し、第二引数には削除したい番号(n番目)を指定します。セパレータもメニューに含みますから全てのシステムメニューを削除するには7つ削除しないといけません。
下のサンプルでは全て(セパレータ含む)のシステムメニューを削除します。DeleteMenu関数の第二引数が0なのは0番目(一番上)を削除すると、次のメニューが繰り上がって0番目になるからです。

※「閉じる」を削除するとタイトルメニューの×ボタンまでグレー(Enabled=False)になりますが、最小化・最大化メニューを削除してもタイトルメニューのボタンは残ったままになります。最小化・最大化ボタンを消去したい場合は「フォーム・最小化最大化ボタンの消去(API)」を参照してください。

Private Sub Form_Load()
  
Dim i As Integer
  
Dim lret As Long
  Dim hMenu As Long

  hMenu = GetSystemMenu(Me.hwnd, 0)

  
For i = 0 To 6
    
Call DeleteMenu(hMenu, 0, MF_BYPOSITION) 'システムメニューの上からn番目を削除
  
Next
End Sub

'-------------------------------------------------------
'
'-------------------------------------------------------
Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Public Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

Public Const MF_BYPOSITION = &H400&


DownLoad vbtips083.lzh 2KB (VB6.0)