为什么SetWindowPos(......) 不能把窗口显示到前面 窗口被遮住,但是用SetWindowPos(myHWND , HWND_TOP , 0 , 0 , 0 , 0 ,SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE) 不能把它显示到前面。我的程序要求把窗口显示到前面,又不能触发WM_WINDOWPOSCHANGING、WM_ACTIVATE、WM_NCCALCSIZE这几个消息,请高手指教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用 SetForegroundWindow 或 BringWindowToTop 可以吗? BringToTopSetForegroundWindowSetWindowPos(myHWND , HWND_TOPMOST , 0 , 0 , 0 , 0 , SWP_NOSIZE | SWP_NOMOVE) 总能折腾出来吧 void BringWindowToTop(HWND hWnd) { if (::IsWindow(hWnd)) { ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); ::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); } } 先把窗体风格改成HWND_TOPMOST,然后再设回来,这样既达到了窗口显示到前面效果,又能保证窗体的属性不变 SWP_NOSIZE | SWP_NOMOVE | SWP_NOSENDCHANGING当前进程必须是前台进程。 SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); 这种形式将窗口置顶以后,如果点击了标题栏,再点其它窗口,被设置的窗口会继续挺在顶层,如果不点标题栏倒是没事SetForegroundWindow、BringWindowToTop都会触发WM_ACTIVATE消息SWP_NOSIZE | SWP_NOMOVE | SWP_NOSENDCHANGING组合也不行,我是要将word、excel前置,这两个东东是前台进程吧? 用了::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); 可能还导致一个问题,点击“显示桌面”按钮,有时候会导致任务栏消失,按“开始”按钮又能显示出来,相当郁闷 SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);::SetWindowPos(this->GetSafeHwnd(),HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);只能在窗口运行过程中保持是最前面的,除非修改属性TopMost为true hWnd为窗口的句柄::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE) ; 这样可以设置窗口为最前面窗口,在ON_WM_NCACTIVATE()事件中,BOOL CIdeDlg::OnNcActivate(BOOL bActive) { // TODO: Add your message handler code here and/or call default SetWindowPos(&wndNoTopMost,0,0,0,0,SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE); return CDialog::OnNcActivate(bActive);}即可显示后面。 MFC工程能通过注册服务到工程,实现开机自动启动吗? 如何画圆形按钮,请高手解答! 小笑话一则 OpenCV的问题,colorTemp能得到像素值吗?? 高手进来,DLL中的同步问题 自适应调整大小 为什么Rectangle换成FillRect就不能闪烁了 提问:关于VC和VB之间通讯的问题 急!请教一个在WORD文档中搜寻关键字的方法,有代码的扔一段过来,谢谢各位大侠 盗版软件是成全了国内开发者还是害了国内开发者? 在UNICODE环境下,如何将char buf[256]转换成LPCTSTR ?? 全双工转半双工通信
SetForegroundWindow
SetWindowPos(myHWND , HWND_TOPMOST , 0 , 0 , 0 , 0 , SWP_NOSIZE | SWP_NOMOVE)
总能折腾出来吧
{
if (::IsWindow(hWnd))
{
::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
}
}
当前进程必须是前台进程。
::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
这种形式将窗口置顶以后,如果点击了标题栏,再点其它窗口,被设置的窗口会继续挺在顶层,如果不点标题栏倒是没事SetForegroundWindow、BringWindowToTop都会触发WM_ACTIVATE消息SWP_NOSIZE | SWP_NOMOVE | SWP_NOSENDCHANGING组合也不行,我是要将word、excel前置,这两个东东是前台进程吧?
::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); 可能还导致一个问题,点击“显示桌面”按钮,有时候会导致任务栏消失,按“开始”按钮又能显示出来,相当郁闷
::SetWindowPos(this->GetSafeHwnd(),HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
只能在窗口运行过程中保持是最前面的,除非修改属性TopMost为true
::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE) ;
这样可以设置窗口为最前面窗口,在ON_WM_NCACTIVATE()事件中,BOOL CIdeDlg::OnNcActivate(BOOL bActive)
{
// TODO: Add your message handler code here and/or call default SetWindowPos(&wndNoTopMost,0,0,0,0,SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
return CDialog::OnNcActivate(bActive);
}
即可显示后面。