0

興味深い(しかしイライラする)問題があります。フルスクリーンを使用するアプリケーションがあります (これは、サードパーティのフルスクリーン POS アプリケーションをシミュレートするためのものです)。

私のアプリケーションは、全画面アプリケーションの上に一連のモードレス ダイアログ ボックスを表示します。1つを表示して非表示にし、次を表示して非表示にします。3回目の表示の後、約1秒後にWindowsタスクバーが表示されます。理由がわかりません。

OnNcActivate ハンドラー (スキン ウィンドウを描画するために使用) で何かを行っているかどうかを確認するために、コードをすぐに削除しましたが、問題がタイミングに関連しているように見えるため、そうではないと思います。私は Spy++ を実行し、m WindowProc にメッセージをダンプしようとしましたが、手がかりとなる奇妙なものはまだ見当たりません。

ログに ID 0x36e のメッセージがいくつかありますが、それが何なのかわかりません。さまざまなメッセージ ID リストを確認しましたが、見つかりません。WM_USER は 0x400 まで開始されないため、それらは私自身のメッセージ ID であってはなりません。

タスクバーを自動的に非表示にすることでこの問題を回避できることはわかっていますが、問題を回避するためにタスクバーを自動非表示に設定するよう顧客に依頼することはできません。

モードレス ダイアログ ボックスに関連してタスク バーが表示される理由はありますか?

編集:私は自分で描いたGUIコードを完全に取り除きましたが、まだ同じ問題があります。私は間違っている可能性がありますが、最初に ShowWindow( SW_HIDE) を呼び出すと、Windows は "別のウィンドウ" をアクティブにしようとするようです (MSDN に記載されているように)。この場合、POS アプリケーションではなくタスクバーをアクティブにしていると思います。一方、2 番目のウィンドウで ShowWindow( SW_HIDE ) を呼び出す前に 2 番目のウィンドウを開くと、それ自体が動作しているように見えます。

乾杯スパーキー

4

1 に答える 1

0

長い議論の後、DestroyWindow は問題ではなかったという結論に達しました。最後に、ダイアログが表示されることがわかりました..POSをクリックしてから、タスクバーが表示されることがあるダイアログをクリックして戻します。私はこのすべての理由を見つけようと丸一週間を費やしましたが、役に立ちませんでした. POS ウィンドウを所有者として割り当てることで問題が解決すると思いましたが、そうではありませんでした。最終的に、私の問題の解決策は、ダイアログを表示する前にタスクバーが完全に隠されているかどうかを判断することでした。そうであれば、ダイアログが表示されている間はタスクバーを非表示にし (配置を SW_HIDE に設定)、ダイアログを閉じるときに SW_SHOW に設定します。タスク バーがポップアップ表示されなくなり、人々を悩ませることもなくなりました。おそらく他の人々のアプリケーションにとっては素晴らしいソリューションではありませんが、当社の顧客にとっては完璧です。

于 2011-09-09T03:42:32.617 に答える