关于窗口置前,在程序没有焦点的情况下显示窗口

以前的一些尝试,在本程序没有焦点的情况下调用以下函数(其他程序发送的消息触发)均无效:

SetForegroundWindow();

SetFocus();

SetActiveWindow();

ShowWindow();

于是在只能改动自己程序的前提下,一直使用的都是如下方法:

::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

::SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

即先置顶窗口后取消置顶;


最近在win7下发现这个方法会导致一个问题: 置前后的窗口在点击原最前窗口时不会被隐藏到后面.只有在点击其他窗口后才能正常被遮盖.

后解决方案如下:

HWND hFrgWnd = ::GetForegroundWindow();
AttachThreadInput(GetWindowThreadProcessId(hFrgWnd, NULL), 
GetCurrentThreadId(), TRUE);

::SetForegroundWindow(hWnd);

AttachThreadInput(GetWindowThreadProcessId(hFrgWnd, NULL),
GetCurrentThreadId(), FALSE);


你可能感兴趣的:(C/C++,MFC/VC)