設定windows介面程式--視窗總在最前
阿新 • • 發佈:2018-12-12
1、程式碼
void setWindowFront(bool bFront) { if (bFront) { #ifdef Q_OS_WIN32 ::SetWindowPos((HWND)this->winId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); #else this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); #endif } else { #ifdef Q_OS_WIN32 ::SetWindowPos((HWND)this->winId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); #else this->setWindowFlags(this->windowFlags() & ~Qt::WindowStaysOnTopHint); #endif } if (!this->isVisible()) { setVisible(true); } }
2、說明這裡提供了兩種做法
(1)、第一種是QT的,QT的設定必須要最後的顯示,不然會會關閉這個視窗,且QT設定介面最前的時候會隱藏掉視窗,在隱藏後顯示會有介面閃爍的情況,這個當然和預計不符合
(2)、使用windows 自帶的介面,此方法和QQ程式使用方法應該是一致的,此方法和QQ介面相比,點選哪一個,哪一個就在最前
SetWindowPos函式改變一個子視窗,彈出式視窗或頂層視窗的尺寸,位置和Z序。子視窗,彈出式視窗,及頂層視窗根據它們在螢幕上出現的順序排序、頂層視窗設定的級別最高,並且被設定為Z序的第一個視窗。
SetWindowPos(HWNDhWnd,HWNDhWndInsertAfter,intX,intY,intcx,_In_intcy,UINTuFlags);
注意這裡的SWP_NOSIZE | SWP_NOMOVE 並不是不能改變大小,和不能移動
SWP_NOSIZE: 視窗大小尺寸不改變
SWP_NOMOVE:視窗位置不改變
t