窗口置顶

本文详细介绍了在Windows系统中实现窗口置顶的多种方法,包括使用BringWindowToTop、SetWindowPos和SetForegroundWindow等API函数。BringWindowToTop使窗口在Z序中前置但不激活,SetWindowPos的TOPMOST参数使窗口始终保持在最顶层,而SetForegroundWindow则不仅将窗口前置还激活窗口,使其成为当前焦点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果我们想改变窗口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; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值