我有一个带有几个窗口的应用程序,其中只有主窗口出现在任务栏中。
点击任务栏中的图标,我希望我的所有应用程序窗口都显示在任何其他打开的窗口之上。
我尝试过Form_Activated事件,但如果通过主窗口中的直接点击激活了应用程序,也会触发此事件。
那么我如何检测是否有人仅从任务栏激活了应用程序?
答案 0 :(得分:3)
它已经这样运作了。但是,您必须使用Show(所有者)重载,以便“子”窗口始终位于主窗口的顶部,并且不会在另一个应用程序的窗口后面丢失。几乎所有商业计划都是这样的。
可以区分激活原因,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");
}
}
}
答案 1 :(得分:0)
Form_Activated对我有用......