お世話になります。
環境:VC++6.0 MFC
XP
仮想デスクトップを作りたいと思っているのですが
どのように作成すればよいのかわかりません。
ウィンドウのサブクラス化が必要なのでしょうか。
CreateDesktop で作って SwitchDesktop で切り替えってのはいかがでしょうか。
シャノン様
回答ありがとうございます。
この方法でいけば仮想デスクトップの作成が行えそうです。
ありがとうございます。
もう1点質問なのですが、起動中のアプリケーションを
マウス操作でそれぞれ作成したデスクトップに渡す方法に悩んでいます。
良い方法はございますでしょうか。
うーん…
このデスクトップ関連関数群を初めて試してみたのですが、どうも、ウィンドウはウィン
ドウ作成時のデスクトップに関連付けられてしまって、後からデスクトップを変更するこ
とが出来ないようですね。
で、別の方法を考えました。
仮想デスクトップと言いつつ、実際は1つのデスクトップで、別のデスクトップに切り替
えるときは、タスクバーをのぞく全トップレベルウィンドウを非表示にしてしまうという
ものです。
シャノン様
回答ありがとうございます。
タスクバーを除く全トップレベルウィンドウを非表示にするとありますが
その方法として
EnumWindows関数を使用して
画面上のすべてのトップレベルウィンドウを列挙しそれを
ShowWindow関数で非表示にすれば宜しいのでしょうか。
その場合、どのようにアプリケーションウィンドウを仮想画面毎に制御すれば宜しいの
でしょうか。
その実装まで他人に頼ったら何のために作ってるのかさえ疑問なんですが。
仮想デスクトップソフトが使いたいだけなら既存品がありますし・・・
方向としては『「ウィンドウハンドルと表示先仮想画面の組」のリストを自アプリ
ケーション内に保持し、新規ウィンドウや消滅したウィンドウについて追加や削除
を随時行う』や『全仮想画面分のリストを用意しておき、別仮想画面に切り替
える際に現在表示中のウィンドウを現在の仮想画面用リストに保存し、切り替
え先仮想画面用リストのうち有効なウィンドウだけを表示する』等があります。
こういうのを考えてこそのプログラミングなので、挙げた例が理解できようが出来ま
いが、自分で考えた方が良いかと思います。
ただねぇ…非表示にすると、Excelの表示が変になるんだよね。
返信が遅くなり申し訳ありません。
麩様
回答ありがとうございます。
確かにおっしゃる通りです。<(_ _)>
例を挙げていただきありがとうございます。
参考にさせて頂き自分なりにてやってみます。
シャノン様
回答ありがとうございます。
Excelがですか??
仕様的なものなのでしょうか。
なんとかならないかやってみます。
ありがとうございました。
Windows の標準的な操作として、「ウィンドウを非表示にする」というのがありませんか
ら、メインウィンドウが非表示にされることを想定した作りになっていないアプリ、非表
示にしてから再表示したときに正常に復帰しないアプリがあるというのは、無理も無いこ
とかと思います。
> ただねぇ…非表示にすると、Excelの表示が変になるんだよね。
マルチ・インスタンスで作られたプログラム(Excelなど)は
EnumWindows関数で詳しく調べて関連するものをすべて
非表示にすればできる。
でもExcelで3つファイルを開いている内の1つだけを
非表示にするのは難しい。僕にはできなかった。
巷にある仮想デスクトップの切り替えで簡単なものは
トップレベルのウインドウを表示・非表示にしているのがある。
この方法が一番簡単だね。
シャノン様
回答ありがとうございます。
これは手の施しようがない部分になってしまいますね。
ですが、影響は最小限に抑えたいところです。
ぴょぴょ様
回答ありがとうございます。
トップレベルウィンドウの表示・非表示の切替で作成したいと思います。
皆様のおかげである程度のところまで作る事ができました。
ですが、新たにアプリを立ち上げた際の処理に困っています。
デスクトップを常に監視する処理が必要なのでしょうか。
特定のアプリは常に特定のデスクトップで起動する、という仕様があるということです
か?
であれば、新しいウィンドウが作成されたことを検知してデスクトップを切り替える処
理が必要でしょうね。