WA_INACTIVE
WA_ACTIVE
重载对话框的WindowProc,
LRESULT CDLGDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
// TODO: Add your specialized code here and/or call the base class
switch ( message )
{
case WA_INACTIVE:
//...
case WA_ACTIVE:
//...
}
return CDialog::WindowProc(message, wParam, lParam);
}

解决方案 »

  1.   

    不行呀
    只是程序刚启动的时候能接收到WA_ACTIVE消息
    切换程序的时候还是没有消息呀?
    用了SPy++也没有检测到WA_INACTIVE的消息,
    再回回吧
      

  2.   

    如果仅仅是实现,干脆就检查自己是不是当前ActiveWindow了.
    要是存心研究的话...我忘了...记得有这么一个消息的.
      

  3.   

    WM_ACTIVATEAPP会发给被激活或失去激活的应用程序所拥有的所有窗口,比如所有的按钮,所有的EDITBOX,等等
      

    WM_ACTIVATE只会发给被激活或失去激活的那个窗口所以:你使用WM_ACTIVATEAPP消息比较好,这样在你的Dialog失去焦点的时候也能知道被切换(比如,你的Dialog弹出一个MessageBox, 这个MessageBox的父窗口,也就是这个Dialog失去焦点,因为这时候切换程序,你的Dialog窗口是收不到WM_ACTIVATE消息的,但是还是能收到WM_ACTIVATEAPP消息),例子如下:afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
    ON_WM_ACTIVATEAPP()
    void CSwitchDialogDlg::OnActivateApp(BOOL bActive, HTASK hTask) 
    {
    CDialog::OnActivateApp(bActive, hTask);

    if( bActive ) // app being activated
    {
    }
    else // app being deactivated
    {
    }
    }