我有一个带有多个窗口的应用程序,其中只有主窗口出现在任务栏中。
单击任务栏中的图标,我希望所有应用程序窗口都显示在任何其他打开的窗口之上。
我尝试了 Form_Activated 事件,但如果通过直接单击主窗口激活应用程序,也会触发该事件。
那么我如何检测是否有人仅从任务栏激活了该应用程序?
它已经这样运作了。但是,您必须使用 Show(owner) 重载,以便“子”窗口始终位于主窗口的顶部,并且不会丢失在另一个应用程序的窗口后面。几乎所有商业程序都是这样工作的。
区分激活的原因是可能的,Windows 提供了先前活动窗口的窗口句柄。然后您可以检查它是否是您自己的窗口之一。然而,这在这种情况下不可用,您必须自己捕获该消息。像这样:
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
// Trap WM_ACTIVATE when we get active
if (m.Msg == 6 && m.WParam.ToInt32() == 1) {
if (Control.FromHandle(m.LParam) == null) {
Console.WriteLine("activated from another process");
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)