我的应用程序使用多个窗口的WinForms:如何确定窗口不再有效(无子窗口具有焦点)?
我想隐藏的情况下,一个特定的窗口的应用程序失去焦点(当活动窗口不是应用程序窗口)source
我处理Deactivate
事件我的主要形式。
private void MainForm_Deactivate(object sender, EventArgs e)
{
Console.WriteLine("deactivate");
if (GetActiveWindow() == this.Handle)
{
Console.WriteLine("isactive=true");
}
else
{
Console.WriteLine("isactive=false");
}
}
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();
输出始终
deactivate
isactive=true
,如果我的应用程序中的一个新的窗口接收焦点并且如果我点击进入一个不同的应用程序我观察到相同的行为。
我希望GetActiveWindow
从Deactivate
处理程序调用时返回新的活动窗口的句柄。相反,它总是返回我的应用程序窗口的句柄。
这怎么可能?停用事件是否“过早”处理? (虽然主要形式仍然活跃?)。
我如何检测我的应用程序已失去焦点(我的应用程序窗口不是活动窗口)和其他应用程序获得它没有一个计时器运行GetActiveWindow?
我们是在谈论一个MDI应用程序? – Bobby 2010-03-25 16:27:22
不,这不是一个MDI应用 – Marek 2010-03-25 16:28:52