興味深い(しかしイライラする)問題があります。フルスクリーンを使用するアプリケーションがあります (これは、サードパーティのフルスクリーン 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 番目のウィンドウを開くと、それ自体が動作しているように見えます。
乾杯スパーキー