SetWindowLong関数 〜ウィンドウの最大化・最小化ボタンを無効にする方法〜

目次に戻る

☆ その方法 −何と書けば良いのか?−

 まず、ウィンドウの最大化ボタンを無効にしたい場合は、以下のように記述します。

long WinVal;

WinVal = GetWindowLong (ウィンドウへのハンドル, GWL_STYLE);
SetWindowLong (ウィンドウへのハンドル, GWL_STYLE, WinVal - WS_MAXIMIZEBOX);

 そして、上の例の赤字の部分を、次のように変えてやれば、他のボタンを無効にすることが可能になります。

最大化ボタン WS_MAXIMIZEBOX
最小化ボタン WS_MINIMIZEBOX
全部のボタン WS_SYSMENU

 なお、この方法を使う場合、「閉じるボタンだけを無効にする」という事はできません。
 

☆ 使用例:(BCBで、Form1の最大化ボタンを無効にしたい場合。)

long WinVal;

WinVal = GetWindowLong (Form1->Handle, GWL_STYLE);
SetWindowLong (Form1->Handle, GWL_STYLE, WinVal - WS_MAXIMIZEBOX);

 なお、このAPIを使っても何も起こらないときは、いちどウィンドウを再描画してみると、うまくいくかもしれません。

☆ 解説 −SetWindowLong関数って、何?−

 ウィンドウの最大化・最小化ボタンを消すには、WinAPIの GetWindowLong 関数と SetWindowLong 関数を使います。
 
 ウィンドウには、それぞれ色んなプロパティが格納されています。
 基本的にWindowsでは、これらのプロパティをいじることで、ウィンドウの状態を変更しています。
 
 
このプロパティを取得する関数が、 GetWindowLong 関数です。
 そして、この関数で取得したプロパティを、いったん変数に入れ、プロパティを色々な演算でいじくり回します。
 そのいじくり回したプロパティを、再度ウィンドウに覚え込ませるのが、 SetWindowLong 関数です。


目次に戻る