重叠窗口,需要改变下层窗口的状态时,改变内容后,需要SetWindowPos把该窗口置顶(位置并非就跑到上面了)

来源:互联网 发布:缅甸密松水电站 知乎 编辑:程序博客网 时间:2024/04/30 12:55

方法一:

查看msdn的setwindowpos

 

示例:

    ::SetWindowPos(m_hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);    /* frame窗口置前,否则节点不显示选中 */

 

方法二:

SetForegroundWindow();

 

方法三:

SetFocus();

这种方法是最灵活的.但是要注意如果是给控件设置焦点的话,是给待设置焦点的控件用,而不是它所在的窗口.

 

另外窗口置顶的方法:

仅现在置顶:    ::SetWindowPos(pDlg->m_hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);  

始终置顶:    ::SetWindowPos(pDlg->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);    /* 始终置顶 */

 

方法四:如果既要处理最小化又要处理窗口置后的情况,则:

        // 针对于最小化
        ::SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
        ::SendMessage(hWnd, WM_SYSCOMMAND,SC_RESTORE, 0);
        ::RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
        
        // 针对于窗口置后
        SetForegroundWindow(hWnd);