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. |
検索キーワード及びサンプルコードの別名(機能名) |
指定のシステムメニューを削除する システムメニューを元に戻す 最大化・最小化ボタンをプログラムから削除する 最大化・最小化ボタンをプログラムから元に戻す メニューバーを再描画する システムメニューのハンドルを取得 ウィンドウに関する属性を変更する ウィンドウに関するデータを取得する |