为啥显示自绘无模对话框时会出现任务栏? .. 有时?

Posted

技术标签:

【中文标题】为啥显示自绘无模对话框时会出现任务栏? .. 有时?【英文标题】:Why does the task bar appear when I display a self-drawn modeless dialog? .. sometimes?为什么显示自绘无模对话框时会出现任务栏? .. 有时? 【发布时间】:2011-09-01 23:25:56 【问题描述】:

我有一个有趣(但令人沮丧)的问题。我有一个使用全屏的应用程序(这是为了模拟第三方全屏 POS 应用程序)。

我的应用程序在全屏应用程序的顶部显示一系列无模式对话框。它显示一个,隐藏它,然后显示下一个,隐藏它等等。第三次显示后,Windows 任务栏大约 1 秒后出现。我不知道为什么。

我已经剥离了我的代码,以查看它是否在我的 OnNcActivate 处理程序(我用它来绘制我的蒙皮窗口)中做的事情,但我不认为这是因为问题似乎与时间有关.我自己尝试过运行 Spy++ 以及在 m WindowProc 中转储消息,但我仍然看不到任何奇怪的东西可以给我任何线索。

我的日志中有一些 ID 为 0x36e 的消息,但我不知道它们应该是什么。我检查了各种消息 ID 列表,但找不到它们。它们不应该是我自己的任何消息 ID,因为 WM_USER 直到 0x400 才开始。

我知道我可以通过自动隐藏任务栏来解决这个问题,但我不能要求我们的客户将他们的任务栏配置为自动隐藏来解决我的问题。

任何想法为什么任务栏会出现在我的非模式对话框中?

编辑:我完全去掉了我自己绘制的 GUI 代码,但我仍然遇到同样的问题。我可能是错的,但似乎当我首先调用 ShowWindow(SW_HIDE) 时,Windows 会尝试激活“另一个窗口”(如 MSDN 中所说)。我认为在这种情况下它会激活任务栏而不是 POS 应用程序。另一方面,如果我在第二个调用 ShowWindow( SW_HIDE ) 之前打开我的第二个窗口,那么它似乎表现得很好。

干杯 闪闪发光的

【问题讨论】:

没错。焦点需要转到某处。要让 Windows 选择您的主窗口,请将其设置为无模式对话框的所有者。这篇文章是关于模态窗口和启用的,但原理是一样的。 blogs.msdn.com/b/oldnewthing/archive/2004/02/27/81155.aspx 这很有意义,但是如果您实际上并不拥有“主窗口”——在我的例子中是 POS 应用程序,该怎么办。我们的软件可以在许多不同的 POS 应用程序上运行,所以我真的没有办法找出 POS 的窗口句柄是什么。我知道如何针对特定的 POS 执行此操作,但我无法预测未来的 POS 应用程序行为等。 肯定有办法断开应用程序与桌面的连接?我确实有一个主对话框窗口,它也是无模式的。我抱怨的所有弹出对话框都有(隐藏的)“主对话框”窗口作为它们的所有者。但是,如果我按热键来显示主对话框,那么每次都会出现任务栏和主对话框窗口。当然可以创建与任务栏/桌面没有关联的无模式对话框?? Windows 不知道“嘿,这个 POS 窗口很特别,当没有明显的焦点位置时应该获得焦点。” 有人 需要说“这个窗口接下来应该获得焦点”。而那个人就是你。直观地说,您如何识别 POS 窗口?也许您将其识别为在显示对话框之前具有焦点的窗口。也许您认为它是最顶层的全屏窗口。也许您认为它是属于 POS.EXE 的唯一可见窗口。无论你的方法是什么,都将其转换为代码。 窗口管理器寻找一个窗口并选择一些非全屏窗口。任务栏显示“由于焦点不在全屏窗口上,我会出现”。您的窗口未与任务栏“关联”。任务栏只是遵循其规则。如果你想脱离桌面,你可以创建自己的桌面,但你会发现这比它的价值要复杂得多。 【参考方案1】:

经过长时间的讨论,我得出结论,DestroyWindow 不是问题所在。最后我发现显示一个对话框..单击POS,然后单击有时会出现任务栏的对话框。我花了整整一周的时间试图找到所有这一切的原因,但无济于事。我认为将 POS 窗口指定为所有者可以解决问题 - 但事实并非如此。最后,我的问题的解决方案是在显示我的对话框之前确定任务栏是否完全被遮挡。如果是,我会在显示对话框期间隐藏任务栏(将其位置设置为 SW_HIDE),然后在关闭对话框时将其设置为 SW_SHOW。任务栏不再弹出并烦人。对于其他人的应用程序而言,这可能不是一个出色的解决方案,但对于我们的客户来说却是完美的。

【讨论】:

以上是关于为啥显示自绘无模对话框时会出现任务栏? .. 有时?的主要内容,如果未能解决你的问题,请参考以下文章

为啥任务栏没有图标

为啥 Cast V3 应用程序有时无法更改音量

为啥电脑任务栏出现一个QQ头像和GDI+Window?

单击下载链接并出现文件保存对话框时会触发啥事件?

任务栏总是显示所有图标无法折叠隐藏

为啥我用CAD 命令行出现窗口无效说明提示?