ふぢのVB小技集 |
MDIフォームの最大化・最小化ボタンを消したい。
(質問)
MDIフォームのプロパティに'MaxButton'、'MinButton'プロパティが無いため、最小化・最大化ボタンが消せません。なんとかしてください。
質問者:多摩七島 在住 守Yさん
(回答)
今回は、多摩七島の一つ、「昭島」在住の守Yさんからの質問です。
MDIフォームの最小化・最大化ボタンを消すには、WindowsAPIの'GetWindowLong'、'SetWindowLong'を使用すればOKです。
(解説)
VBで作るMDIフォームには、最小化・最大化ボタンを消すためのプロパティ'MaxButton'、'MinButton'がありません。
そのため、WindowsAPIの'GetWindowLong'と'SetWindowLong'を使用します。
標準モジュール、またはFormのGeneralプロシージャに以下の宣言文を追加する
'************************************************************* 'ウィンドウの属性を取得するAPI '************************************************************* Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long) As Long '************************************************************* 'ウィンドウの属性を変更するAPI '************************************************************* Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Const GWL_STYLE = -16 'ウィンドウスタイルの書き換え Const WS_SYSMENU = &H80000 '最大化/最小化/消去ボタンなど全て Const WS_MINIMIZEBOX = &H20000 '最小化ボタン Const WS_MAXIMIZEBOX = &H10000 '最大化ボタン
MDIフォームのInitialize、またはLoadイベントプロシージャに以下のように処理を記述する。
Private Sub MDIForm_Load() Dim lngRetVal As Long 'ウィンドウスタイル取得エリア 'MDIフォームのウィンドウスタイルを取得する lngRetVal = GetWindowLong(Me.hWnd, GWL_STYLE) '最小化ボタンを無効にする lngRetVal = SetWindowLong(Me.hWnd, GWL_STYLE, lngRetVal - WS_MINIMIZEBOX) End Sub
さあ、結果を見てみよう!!
(デフォルトのウィンドウ)
Visual Basicで作成したMDIフォームには左のように最小化・最大化ボタンなどが付いています。
しかも、困ったことにそれを消去するためのプロパティがありません。
最小化ボタンを無効にする
ウィンドウスタイルからWS_MINIMIZEBOXを減算した場合、左のように最小化ボタンが押せなくなる。
上記の修正例の表示も左のようになります。
最大化ボタンを無効にする
ウィンドウスタイルからWS_MAXIMIZEBOXを減算した場合、左のように最大化ボタンが押せなくなる。
最小・最大化ボタンを両方とも消す
ウィンドウスタイルからWS_MINIMIZEBOXとWS_MAXIMIZEBOXを減算した場合、左のように最小・最大化ボタンが無くなる。
ぜんぶ消す
最後に、全部消しちゃいましょう!! ウィンドウスタイルからWS_SYSMENUを減算すると、左のような画面になります。
あっ、やべ〜!! 画面が消せなくなっちゃった。とほほ。
守Yさん、いかがでしたでしょうか?