• 締切済み

タスクバーやタスクマネージャーのタスク欄に表示されない

ボタンのクリックやLANでデータを受信すると、次の画面へ遷移する(又は最初の画面へ戻る)プログラムを作成しているのですが、最初のダイアログを ShowWindow(SW_HIDE) している為、タスクバーやタスクマネージャーのタスク欄に表示されず、他のウインドウがアクティブになると、ALT+Tabキーでしかそのウインドウを前に出せません。 VC++を始めて5ヶ月で得た知識や自分力量を考えて、以下のように作成したのですが、何か良い方法はないでしょうか? (1)最初のダイアログの OnInitDialog() で画面を制御するスレッド(以降、画面制御)とLANデータを受信するスレッドを生成 (2)画面制御は、最初の画面をモーダレスで表示(Create) (3)最初のダイアログを ShowWindow(SW_HIDE) で不可視にする。 (4)最初の画面は、あるボタンがクリックされると画面制御にPostMessage()で通知し、画面を閉じる。 (5)画面制御は、2番目の画面を同様にモーダレスで表示(Create) ※LANデータを受信した場合は、画面制御へメッセージキューでデータを渡し、必要に応じてその時表示している画面へ別のメッセージキューでデータを渡しています。 ※あとは、ボタンクリックやLANデータの受信で次の画面へ遷移したり、最初の画面へ戻る。(表示される画面は常に1つ) Windows XP Pro SP3 Visual C++ 6.0 SP6 他の人の回答に、親ウインドウを不可視にすると、タスクバーに表示されないというような事が書いてありましたが、何か良い方法はないものでしょうか? どなたか助言をお願いします。

みんなの回答

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

>メインウインドウを、SW_MINIMIZEにするという助言を試してみました。 >タスクバーには当然ながら表示されますが、それをクリックすると、メインウインドウも当然のように表示されてしまいます。(メインウインドウは表示したくないのです) メインウィンドウの表示周りのイベントを何か工夫して処理してあげれば、 メインウィンドウ自体は表示せずに タスクバー上は表示できると思いますが、 画面制御をしているダイアログをモーダレスにしている理由の方が気になってきました。 もし、ダイアログを最上面に表示したいだけの理由でしたら、 モーダレスダイアログをやめて、最上面表示のスタイルを設定した ウィンドウにする方が簡単かもしれません。

taka077
質問者

お礼

回答、ありがとうございます。 画面制御をしているのは、ユーザインターフェーススレッド用ウインドウで、CreateEXにより親ウインドウと完全に切り離したオーバーラップウインドウです。(この部分は他人が作成した物をそのまま使用しているので、詳しくは説明出来ません。) モーダレスにしたのは8個の画面で、ボタンが操作されたりLANデータを受信した時、PostMessage()やメッセージキューで画面を遷移させるので、モーダレスの方が都合が良いと判断しました。 >メインウィンドウの表示周りのイベントを何か工夫して処理してあげれば、 とは、タスクバーのアイコン?がクリックされた時、メインウインドウは何もせず、その時表示されている画面が最上位にくるようにするという事でしょうか?

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

メインウィンドウを、SW_HIDE せずに、SW_MINIMIZE に してみては如何でしょう。

taka077
質問者

お礼

回答、ありがとうございます。何故か、回答メールが届いてなく、気付きませんでした。 メインウインドウを、SW_MINIMIZEにするという助言を試してみました。 タスクバーには当然ながら表示されますが、それをクリックすると、メインウインドウも当然のように表示されてしまいます。(メインウインドウは表示したくないのです) 表示は、画面制御により制御されているモーダレスの画面だけでして...。 おまけに、Alt+Tabキーを押した時のリストには、モーダレスの画面とメインウインドウの2つが別々に表示されてしまいます。

関連するQ&A