◀ANSI版開発トップへ
  • 3345 マルチスクリーン
    • 3346 マルチモニターでのウィンドウ整列
      • 3348 RE: マルチモニターでのウィンドウ整列
    • 3350 RE: マルチモニター
      • 3367 RE2: マルチモニター
  • [3345] マルチスクリーン げんた 2004年01月07日 00:53

    ちらっと見ただけで試す環境もないのですが,とりあえず問題の場所だけ.

    CEditWnd.cppの385行目~(CEditWnd::Create)
    デスクトップ画面からはみ出さないようにするためにSystemParametersInfo(SPI_GETWORKAREA)で得た値とウィンドウのサイズを比べてウィンドウ位置を調整しています.これだとプライマリモニターの値しか得られないので,マルチウィンドウの場合は
    *まずMonitorFromWindow()でウィンドウのモニターハンドルを取得
    * 次にGetMonitorInfo()でMONITORINFO構造体にウィンドウ情報を得る
    とする必要があると思います.

    SystemParametersInfo(SPI_GETWORKAREA)というのは他にもウィンドウの整列,Tip表示,補完ウィンドウ,TAB表示で使われています.
    あと,マルチウィンドウ関連APIはWindows 95でサポートされていないので,Windows 95で起動でき無くならないためにはOSを判定した上でLoadLibraryとGetProcAddressで動的に呼びだす必要があります.

    etc.cppに指定ウィンドウのある画面のワークエリアを取得する関数というのを作った方がいいでしょう.

    時間ができたら実装してみるつもりですが,先にやりたい片はどうぞ(笑)
    • [3346] マルチモニターでのウィンドウ整列 げんた 2004年01月07日 21:41

      エディタウィンドウを並べる機能をマルチモニターで使ったときの動作についてちょっと疑問.

      モニターAとBがあり,Aにウィンドウ1~3,Bにウィンドウ4~6があるとします.
      そのときA上のウィンドウ2で「左右に並べて表示」を行ったときは
      1. ウィンドウ1~6をモニターAで並べて表示.モニターBのウィンドウは無くなる.
      2. ウィンドウ1~3はモニターAで,4~6はモニターBでそれぞれ並べて表示.
      3. ウィンドウ1~3をモニターAで並べて表示.4~6はそのまま.
      のどれがいいんでしょうか?
      • [3348] RE: マルチモニターでのウィンドウ整列 みく 2004年01月07日 22:28


        両方のモニタにまたがって表示されている場合はどうしましょ?
    • [3350] RE: マルチモニター げんた 2004年01月10日 14:45

      なぜ現状サブモニターで開いた場合のサイズが0になってしまうのか.
      >デスクトップ画面からはみ出さないようにするためにSystemParametersInfo(SPI_GETWORKAREA)で得た値とウィンドウのサイズを比べてウィンドウ位置を調整しています.
      と書きましたが,右or下にはみ出している場合には全体位置を調整するが,左or上の場合はそのような移動処置が無く単にはみ出た部分を切り捨てている.なので,2つ目のモニターがプライマリモニターに対して上or左にある場合に問題の現象が起こるのではないでしょうか.
      • [3367] RE2: マルチモニター げんた 2004年01月25日 14:36

        とりあえず,1.4.3.5ではウィンドウ調整機能をはずすことで対応しました.