VB6のフォームの右上の閉じると最大化を無効にする方法 | Vediamo

Vediamo

とにかくJAZZをやってみよう!

テーマ:
というわけで、タイトルのことをいろいろ調べた結果。

とくに参考になったサイトをご紹介!
VB6の覚書
YAHOO知恵袋
VBレスキュー花ちゃん


QueryUnload イベントっていうのを使うらしく。


この部分を追加しました。

無効にしたいフォームプログラムの一番先頭で宣言する。
僕お恥ずかしい話、この宣言をどこに記載していいか迷ったです。

プライベートなんで同じform内だとは思ったんですが、
初めてこのような書き方をしたので四苦八苦しちゃいました。w
初心者丸出し。。。

モジュールのパブリックでたしか一番上にこのような変数を宣言したことが
あったな~と思ってまねしてみたら出来ました。

きゃ~~~~~~~~~~~~~~~~~~~~~~
ドドスコスコスコラブ注入❤


ダウンここを一番上で宣言してあげる。そうしないと怒られちゃいます。

'=========== 以下最大化・最小化ボタンを削除するの関係分 ============
'システムメニューのハンドルを取得
Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, ByVal bRevert As Long) As Long

'メニューから項目を削除する
Private Declare Function DeleteMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long

'メニューバーを再描画する
Private Declare Function DrawMenuBar Lib "user32" _
(ByVal hwnd As Long) As Long

'ウインドウに関する属性を変更する
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

'ウインドウに関するデータを取得する
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long

Private Const WS_MINIMIZEBOX = &H20000 '最小化ボタン
Private Const WS_MAXIMIZEBOX = &H10000 '最大化ボタン
Private Const GWL_STYLE = (-16)
Private Const MF_BYCOMMAND = &H0& 'メニュー項目のID
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 Form_Load()

Dim Result As Long
Dim hwnd As Long

'最大化・最小化ボタンを取り外す
Dim NewLong As Long

NewLong = GetWindowLong(Me.hwnd, GWL_STYLE)
' NewLong = NewLong And Not (WS_MINIMIZEBOX) ←これは最小化を無効にするのでコメントにしました。
NewLong = NewLong And Not (WS_MAXIMIZEBOX)
NewLong = SetWindowLong(Me.hwnd, GWL_STYLE, NewLong)
DrawMenuBar (Me.hwnd) 'メニューバーを再描画する

hwnd = GetSystemMenu(Me.hwnd, 0&)
Result = DeleteMenu(hwnd, SC_CLOSE, MF_BYCOMMAND)
Result = DeleteMenu(hwnd, 5&, MF_BYPOSITION)

End Sub


念のための記録です。

【VB6、閉じる、無効、なくす、最大化、フォーム】