1. 最小化を検出するためにWM_SYSCOMMANDメッセージハンドラを作成します。
2.通常は WM_SYSCOMMANDのSC_RESTOREを受け取る事が出来ないため、復元検出するために
TApplication::OnMessageハンドラを定義します。
[ヘッダ]
class TForm1 : public TForm
{
...
private:
void
__fastcall WMSysCommand(TMessage& Msg);
void __fastcall AppHandler(tagMSG& Msg, bool&
Handled);
...
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SYSCOMMAND,
TMessage, WMSysCommand);
END_MESSAGE_MAP(TForm)
...
};
[ソース]
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMessage =
this->AppHandler; //イベントハンドラを割り当てる
}
void __fastcall TForm1::AppHandler(tagMSG&
Msg, bool& Handled)
{
if (Msg.message == WM_SYSCOMMAND)
{
if
(Msg.wParam == SC_RESTORE)
{
::DefWindowProc(Application->Handle, Msg.message,
Msg.wParam, Msg.lParam);
//Windowsのデフォルトの処理を実行する事でアニメーションさせる。
Handled = True;
}
}
}
void __fastcall TForm1::WMSysCommand(TMessage&
Msg)
{
switch(Msg.WParam)
{
case SC_MINIMIZE:
//SC_MINIMIZEをチェックする事で最小化を検出できる。
::SetWindowPos(Application->Handle,HWND_BOTTOM,Left,Top,Width,Height,SWP_NOZORDER);
//MainFormと同じ位置、大きさにする
::DefWindowProc(Application->Handle,
Msg.Msg, Msg.WParam, Msg.LParam);
//Windowsのデフォルトの処理を実行する事でアニメーションさせる。
default:
TForm::Dispatch((void*)&Msg);
}
}
|
|