为什么在显示自绘无模式对话框时会出现任务栏? ..有时候?

时间:2011-09-01 23:25:57

标签: dialog taskbar modeless

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

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

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

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

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

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

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

干杯 Sparky的

1 个答案:

答案 0 :(得分:0)

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