Tips.24 C++Builder/Windowsプログラミング
最小化、復元をアニメーションする。
1. 最小化を検出するためにWM_SYSCOMMANDメッセージハンドラを作成します。 
2.通常は WM_SYSCOMMANDSC_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); 
    } 

} 
 

戻る [参照] WIN32API Referenceの WM_SYSCOMMAND 
          TApplication OnMessageイベント