1. 程式人生 > >設定windows介面程式--視窗總在最前

設定windows介面程式--視窗總在最前

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