窗口置顶

如果我们想改变窗口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; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值