窗口置頂

如果我們想改變窗口z-order,是窗口置頂.

  1. BringWindowToTop
  2. SetWindowPos
  3. SetForegroundWindow
BringWindowToTop:調用這個函數類似於調用SetWindowPos函數來改變窗口在Z序中的位置,但是
				 BringWindowToTop函數並不能使一個窗口成爲前臺窗口。

SetWindowPos:TOPMOST 會使該窗口一直置頂,保持在最頂層。

SetForegroundWindow:指定窗口的線程設置到前臺,並且激活該窗口。鍵盤輸入轉向該窗口,併爲用戶改各種可視的
										記號。系統給創建前臺窗口的線程分配的權限稍高於其他線程。(當次在最頂層)

SetForegroundWindow使窗口當前置頂

BOOL ForceForegroundWindow(HWND hWnd) 
{ 
	if(!hWnd || !::IsWindow(hWnd)) 
		return FALSE; 

	HWND hWndCurrentWindow = ::GetForegroundWindow(); 
	if(hWndCurrentWindow == NULL) 
	{ 
		return ::SetForegroundWindow(hWnd); 
	} 

	DWORD dwCurProcId, dwCurThreadId = ::GetWindowThreadProcessId(hWndCurrentWindow, &dwCurProcId); 
	DWORD dwHWndProcId; 
	::GetWindowThreadProcessId(hWnd, &dwHWndProcId); 

	BOOL bReturn = FALSE; 

	if(dwHWndProcId == dwCurProcId) 
	{ 
		bReturn = ::SetForegroundWindow(hWnd); 
	} 
	else 
	{ 
		DWORD dwMyThreadId = ::GetCurrentThreadId(); 

		if(::AttachThreadInput(dwMyThreadId, dwCurThreadId, TRUE)) 
		{ 
			bReturn = ::SetForegroundWindow(hWnd); 
			::AttachThreadInput(dwMyThreadId, dwCurThreadId, FALSE); 
		} 
		else 
		{ 
			bReturn = ::SetForegroundWindow(hWnd); 
		} 
	} 

	return bReturn; 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章