VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 フォーム関係のメニュー
1.表示しているフォームを一度に閉じる
2.フォームの背景にグラデーションを描く
3.メニューの下に3Dラインを引く
4.アクティブなウィンドウだけをタスクバーに表示する
5. フォームを常に手前に表示する
6.フォームの最大化・最小化を取得及び設定・画面の中央に表示する
7.システムメニュー(フォームの左上)を操作する
8.タイトルバーなしウィンドウの作成
9.円形・多角形のフォーム及びコントロールを作成する
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載のフォームに関するサンプル


7.システムメニュー(フォームの左上)を操作する
1.システムメニュー(Formの左上)を操作する(削除・元に戻す)
2.
3.
4. 
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:                  参照設定方法参照
使用 API:GetSystemMenu / DeleteMenu / DrawMenuBar
その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。
    :
このページのトップへ移動します。 1.システムメニュー(Formの左上)を操作する(削除・元に戻す)

デザイン時には一部変更が出来るのですが、プログラム上ではできないので、そのような時にはこれで操作が可能です。(下記は動作確認用のサンプルです)

Option Explicit   'SampleNo=078  2002.05.17

'システムメニューのハンドルを取得(P133)
Private Declare Function GetSystemMenu Lib "user32" _
  (ByVal hWnd As Long, ByVal bRevert As Long) As Long
'メニューから項目を削除する(P122)
Private Declare Function DeleteMenu Lib "user32" _
  (ByVal hMenu As Long, ByVal nPosition As Long, _
   ByVal wFlags As Long) As Long
'メニューバーを再描画する(P123)
Private Declare Function DrawMenuBar Lib "user32" _
  (ByVal hWnd As Long) As Long
Private Const MF_BYCOMMAND = &H0&  'メニュー項目のID(P122)
Private Const SC_CLOSE = &HF060   'システムメニューの閉じる
Private Const SC_MOVE = &HF010    'システムメニューの移動
Private Const SC_SIZE = &HF000    'システムメニューのサイズ変更
Private Const SC_MAXIMIZE = &HF030  'システムメニューの最大化
Private Const SC_MINIMIZE = &HF020  'システムメニューの最小化
Private Const SC_RESTORE = &HF120  'システムメニューの元に戻す
Private Const MF_BYPOSITION = &H400& 'メニュー項目のインデックス


Private Sub Command1_Click()
'指定のポジションのメニューを削除する
  Call fDelSysMenu(Form1, CLng(Text1.Text), False)
  Form1.Hide
  Form1.Show
End Sub


Private Sub Command2_Click()
'指定のポジションのメニューを元に戻す
  Call fDelSysMenu(Form1, CLng(Text1.Text), True)
  Form1.Hide
  Form1.Show
End Sub


'**********************************************************
'* myForm   :メニューを削除するフォーム
'* nPosition  :削除するメニューの位置番号(一番上が 0)
'* sMenuOn   :False=削除 True=元に戻す
'* 戻り値   :正常終了のとき 0 以外 エラーのとき 0
'* 使用例 Call fDelSysMenu(Form1, CLng(Text1.Text), True)
'**********************************************************
Private Function fDelSysMenu(ByVal myForm As Form, _
    ByVal nPosition As Long, ByVal sMenuOn As Boolean) As Long
  Dim hWnd  As Long
  Dim Result As Long

  If sMenuOn Then   'システムメニューを元の状態に戻す
    hWnd = GetSystemMenu(myForm.hWnd, 1&)
  Else  '指定のメニューを削除する
    hWnd = GetSystemMenu(myForm.hWnd, sMenuOn)
    Select Case nPosition
      Case 0 '元のサイズに戻す
        Result = DeleteMenu(hWnd, SC_RESTORE, MF_BYCOMMAND)
      Case 1 '移動
        Result = DeleteMenu(hWnd, SC_MOVE, MF_BYCOMMAND)
      Case 2 'サイズ変更
        Result = DeleteMenu(hWnd, SC_SIZE, MF_BYCOMMAND)
      Case 3 '最小化
        Result = DeleteMenu(hWnd, SC_MINIMIZE, MF_BYCOMMAND)
      Case 4 '最大化
        Result = DeleteMenu(hWnd, SC_MAXIMIZE, MF_BYCOMMAND)
      Case 5, 6 '閉じる及びライン
        Result = DeleteMenu(hWnd, SC_CLOSE, MF_BYCOMMAND)
        Result = DeleteMenu(hWnd, 5&, MF_BYPOSITION)
    End Select
  End If
  fDelSysMenu = Result
  DrawMenuBar (myForm.hWnd)   'メニューバーを再描画する
End Function

このページのトップへ移動します。 2.


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
指定のシステムメニューを削除する  システムメニューを元に戻す  最大化・最小化ボタンをプログラムから削除する  最大化・最小化ボタンをプログラムから元に戻す
メニューバーを再描画する  システムメニューのハンドルを取得  ウィンドウに関する属性を変更する  ウィンドウに関するデータを取得する



このページのトップへ移動します。