ふぢの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_MINIMIZEBOXWS_MAXIMIZEBOXを減算した場合、左のように最小・最大化ボタンが無くなる。








ぜんぶ消す
最後に、全部消しちゃいましょう!! ウィンドウスタイルからWS_SYSMENUを減算すると、左のような画面になります。
あっ、やべ〜!! 画面が消せなくなっちゃった。とほほ。







守Yさん、いかがでしたでしょうか?


戻る