|
||
解説: Windows はシステムやユーザー、ウィンドウに対して様々なメッセージをやり取りしています。 今回は、システムやユーザーがウィンドウに対して送るメッセージの中から簡単なところで、"閉じる" を扱ってみます。 VCL では Form1 から起動した Form2 は Form2->Close(); で閉じることができます。 同じ動作は Win32API の SendMessage 関数を使えば、実現可能です。 ちょっと寄り道: SendMessage はウィンドウにメッセージを送ります。 LRESULT SendMessage( HWND hWnd, // 送り先ウィンドウのハンドル UINT Msg, // 送るメッセージ WPARAM wParam, // メッセージの最初のパラメータ LPARAM lParam // メッセージの 2 番目のパラメータ ); パラメータ hWnd ウィンドウハンドル。 Msg メッセージ。 wParam メッセージ特有の追加情報。 lParam メッセージ特有の追加情報。 戻り値 メッセージ処理の結果。 "閉じる" で使うメッセージには WM_CLOSE を使います。 WM_CLOSE はウィンドウを閉じたい時に、 システムやユーザーがウィンドウに対して送るメッセージで、これによりウィンドウが閉じられます。 使用例: Win32API の SendMessage 関数を使って、Form2 を閉じてみます。 コンポーネントは、 Button を二つ適当に配置してください。 Form2 を作成して、Form1 に インクルードしておきます。 Button1 の OnClick イベントで Form2 を表示させ、Button2 の OnClick イベントで閉じています。 同じ動作は、VCL の Perform 関数でも行えます(Tips を参照してください)。 //------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Form2->Show(); } //------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { SendMessage(Form2->Handle, WM_CLOSE, 0, 0); } //------------------------------------------------------------------- |