翻译《The Old New Thing》- Which windows appear in the Alt+Tab list?

Which windows appear in the Alt+Tab list? - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20071008-00/?p=24863

Raymond Chen 2007年10月08日


        

        有读者Phil Quirk询问,Alt+Tab切换列表中显示哪些窗口的规则是什么。 规则其实相当简单,尽管这不是你凭直觉就能猜到的。

        注意:这个算法的细节是内部实现的一部分。 它随时都可能改变,所以请不要依赖于这些细节。 实际上,随着Flip和Flip3D的出现,这个规则已经发生了变化; 这里我们只讨论传统的Alt+Tab窗口。

        对于每个可见窗口, 我们向上追溯其所有者链,直到找到根所有者。 然后我们向下追溯可见的最后一个活动弹出窗口链,直到找到一个可见窗口。 如果你回到了起始点,那么这个窗口就会被加入到Alt+Tab列表中。

        用伪代码表示这个过程:

BOOL IsAltTabWindow(HWND hwnd)
{
 // Start at the root owner
 HWND hwndWalk = GetAncestor(hwnd, GA_ROOTOWNER);
 // See if we are the last active visible popup
 HWND hwndTry;
 while ((hwndTry = GetLastActivePopup(hwndWalk)) != hwndTry) {
  if (IsWindowVisible(hwndTry)) break;
  hwndWalk = hwndTry;
 }
 return hwndWalk == hwnd;
}

        这个算法的目的是为每个通过所有权关联的窗口群组分配一个最有代表性的窗口。 (注意,这个算法不考虑被拥有的窗口是模态的还是非模态的。)

        至少在你不是在玩一些复杂的窗口样式游戏时,规则就是这么简单。 WS_EX_TOOLWINDOWWS_EX_APPWINDOW这两个扩展样式是为了让人们能够操纵窗口是否出现在Alt+Tab列表中,即使按照简单规则它们本不应该出现。

        这是Windows提供的一种“如果你认为你比Windows更聪明,那就来证明它”的选项。 我个人建议避免使用这些选项,因为它们会使你的窗口与系统中其他窗口的行为不一致。

        具有WS_EX_TOOLWINDOW扩展样式的窗口,即使它是可见的,也会被当作不可见处理。 具有WS_EX_APPWINDOW扩展样式的窗口,即使它有所有者,也会被当作没有所有者处理。

        一旦你开始使用这些扩展样式,你就进入了“试图绕过规则”的领域,结果通常是比没有使用它们时更加混乱。

        我不确定最初的评论者到底想表达什么。 评论中描述的窗口层级结构(这更像是一个让我调试他们问题的要求,而不是一个建议)说窗口C同时是窗口A和B的模态窗口,这对我来说没有意义,因为一个窗口只能有一个所有者。

        选择Alt+Tab代表窗口的算法可能不是完美的,但它是目前我们所拥有的。 我确信这个算法的细节会不时地进行调整。 不,让我更正一下。 我知道这个算法的细节会不时地进行调整。 操作的本质是保持不变的(显示用户可以切换到的窗口,使用每个窗口群组中最“自然”的候选窗口), 但随着“自然”概念的细化,具体细节可能会被微调。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0x0007

可不可奖励我吃只毛嘴鸡 馋😋

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值