0

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

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

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

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

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

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

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

干杯火花

4

1 回答 1

0

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

于 2011-09-09T03:42:32.617 回答