16,472
社区成员
发帖
与我相关
我的任务
分享
处理主窗口的 WM_ACTIVATE 消息 ,
失去焦点时,把当前的焦点的控件的句柄保存 m_focuswnd=GetFocus()
得到焦点时,用setfocus( m_focuswnd )
有可能需要延时。 或者让系统先处理 WM_ACTIVE 消息后(系统会调用setfocus 去设置它认为的焦点控件),之后我们再处理此消息
仅供参考
case WM_ACTIVATE:
{
UINT nState=LOWORD(wParam);
if(nState==WA_INACTIVE) //lose focus
{
HWND ActiveWnd=(HWND)lParam; //获得焦点的窗口,必须是当前进程中的,而且是popup窗口
trace(ActiveWnd);
//如果此窗口在当前进程中 ::GetForegroundWindow()就是它自己。否则就是新激活的窗口
trace( ::GetForegroundWindow() );
}
else //active
{
}
}
break;