|
|
||||
Tips > |
|||||
MESSAGE_MAP でウィンドウサイズを制限 |
更新 : 2010/06/26 |
||||
|
|
||
解説: C++Builder では、イベントを呼び出し、Windows メッセージに応じた処理をコーディングしていきます。しかし、全てのメッセージがイベントで処理できるわけではありません。めったに使わないWindows メッセージ等はフォームに届いても知ることができないのです。そうした Windows メッセージを捕らえるために用意されたメカニズムがメッセージマップです。 メッセージマップを使うには、フォームのヘッダに次のような宣言を加えます。 BEGIN_MESSAGE_MAP MESSAGE_HANDLER END_MESSAGE_MAP 使用例: アプリを起動後、Form のサイズ変更してみます。最大と最小のサイズが制限されていて、それ以上の変更ができないことが分かります。 今回のコンポーネントは、 Form だけで他にありません。 コーディングとしては、まずメッセージマップが、ウィンドウの大きさを制限するメッセージを捕らえ、WMGetMinMaxInfo 関数を呼び出せるように、 "Unit1.h" に宣言しておきます。 実際のイベントは、"Unit1.cpp" の WMGetMinMaxInfo に記述します。 ここでは、ウィンドウの大きさを制限するため WM_GETMINMAXINFO メッセージを処理しています。このメッセージはウィンドウのサイズや位置が変化しようとしている時に送られてくるので、 これを捕まえてデフォルトの位置やサイズを変更します。 "Unit1,h" //------------------------------------------------------------------- private: // ユーザー宣言 void __fastcall WMGetMinMaxInfo(TMessage& Message); public: // ユーザー宣言 BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_GETMINMAXINFO, TMessage, WMGetMinMaxInfo) END_MESSAGE_MAP(TComponent) //------------------------------------------------------------------- "Unit1,cpp" //------------------------------------------------------------------- void __fastcall TForm1::WMGetMinMaxInfo(TMessage& Message) { MINMAXINFO *info = (LPMINMAXINFO)Message.LParam; info->ptMinTrackSize.x = 200; // 最小幅 info->ptMinTrackSize.y = 100; // 最小高さ info->ptMaxTrackSize.x = 500; // 最大幅 info->ptMaxTrackSize.y = 300; // 最大高さ } //------------------------------------------------------------------- |