c#怎么做到弹出一个窗口,但焦点依然在原窗口上而不会到弹出窗口上来?
1个回答
展开全部
题主的表意不明确。
● 如果是想说,题主自己编写了一个有两个窗口的程序,在第一个窗口时弹出第二个窗口,但焦点还在第一个窗口上,那么只需要在新的窗口 Show() 之后,this.Focus(); 就可以继续让焦点在本窗口上了。
● 如果是想说,向QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法:
要么重写需要弹出的窗体的事件:
protected override CreateParams CreateParams
{
get
{
const int WS_EX_NOACTIVATE = 0x08000000;
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_NOACTIVATE;
return cp;
}
}
// CreateParams 在 System.Windows.Forms.Controls 命名空间下
要么调用系统钩子:
// 引用系统钩子
[DllImport("user32.dll")]
public static extern IntPtr GetActiveWindow();
[DllImport("user32.dll")]
public static extern IntPtr SetActiveWindow(IntPtr hwnd);
// 在窗口弹出时做以下处理
IntPtr activeForm = GetActiveWindow(); // 先得到当前的活动窗体
new form2.Show(false); // 弹出新窗体
SetActiveWindow(activeForm); // 在把焦点还给之前的活动窗体
七鑫易维信息技术
2024-09-02 广告
2024-09-02 广告
Play Video 七鑫易维是致力于机器视觉和人工智能领域的高新科技企业,迄今已专注眼球追踪技术的研发、创新与应用超过14年,拥有完全自主知识产权,全球专利总量655余项。 作为眼球追踪技术领域的全球知名品牌,七鑫易维的产品体系覆盖眼动分...
点击进入详情页
本回答由七鑫易维信息技术提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询