C++Builerによるプログラムテクニック


ここでは紹介したプログラムを作る上で使用したテクニックの中からいくつかを紹介いています。
●スクリーンセーバー 編
  1. コマンドライン引数を取得するには
  2. スクリーンセーバのコマンドライン引数は
●関数電卓 編
  1. フォームのサイズを制限するには

1:コマンドライン引数を取得するには
Windowsはスクリーンセーバーの起動のときにさまざまなコマンドライン引数を使っています。スクリーンセーバープログラムはさまざまな引数に応答しなければならないためコマンドライン引数によって処理を変える必要が出てきます。
コマンドライン引数を取得するためにはWinMain関数中で以下のコードを加えます
     AnsiString string;
     string=ParamStr(1); //ParamStr(n)でn番目のコマンドライン引数を取得する。
     string.SetLength(2); //string変数(AnsiString型)に引数の2文字目までを代入した。
2:スクリーンセーバーのコマンドライン引数は
Windowsはスクリーンセーバーの起動のときに次のようなコマンドライン引数を使っています。
全画面モードで起動orプレビュー/s
オプションダイアログ中の画面でプレビュー/p
オプションダイアログ中で設定をするとき/c****
ただし、****には起動ごとに異なる数字が入ります。このため上のテクニックではコマンドライン引数の二文字目までを有効にしています。(Windows98のみ関係あります)
オプションダイアログでパスワードを変更したとき/a

1:フォームのサイズを制限するには
WindowsのWM_GETMINMAXINFOメッセージに応答してフォームの最大と最小のサイズを設定します。 また、最大化したときの位置・サイズも決定することができます。
(Unit1.h)で
private://ユーザー宣言
 void __fastcall WMGetMinMaxInfo(TWMGetMinMaxInfo &Msg);

public:

BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_GETMINMAXINFO,TWMGetMinMaxInfo,WMGetMinMaxInfo)
END_MESSAGE_MAP(TForm)

(Unit1.cpp)で
void __fastcall TForm1::WMGetMinMaxInfo(TWMGetMinMaxInfo &Msg);
{
Msg.MinMaxInfo->ptMaxSize.x=300  //最大化したときのフォームの幅
Msg.MinMaxInfo->ptMaxSize.y=200 //最大化したときのフォームの高さ

Msg.MinMaxInfo->ptMaxPosition.x=0 //最大化したときの横位置
Msg.MinMaxInfo->ptMaxPosition.y=0 //最大化したときの縦位置

Msg.MinMaxInfo->ptMaxTrackSize.x=300 //マウスでサイズを変更するときのフォームの最大幅
Msg.MinMaxInfo->ptMaxTrackSize.y=200 //マウスでサイズを変更するときのフォームの最大の高さ

Msg.MinMaxInfo->ptMinTrackSize.x=100 //マウスでサイズを変更するときのフォームの最小の幅
Msg.MinMaxInfo->ptMinTrackSize.y=50 //マウスでサイズを変更するときのフォームの最小の高さ
}