サブモニタで最大化したダイアログがはみ出る – プログラミング – Home

サブモニタで最大化したダイアログがはみ...
 
通知
すべてクリア

[解決済] サブモニタで最大化したダイアログがはみ出る


NOR
 NOR
(@NOR)
ゲスト
結合: 23年前
投稿: 128
Topic starter  

Visual C++ 2008 MFC、XPです。
VC2005やVC6のMFCでも発生したため、Feature Packは関係無いと思われますが、
みなさんの環境でも発生するか試していただきたいことがあります。

以下のような簡単なサンプルで、最大化時の問題が発生しています。

1. 標準の設定でダイアログベースアプリケーションのプロジェクトを作成
2. IDD_ABOUTBOXのダイアログを「サイズ変更枠」「最大化ボタンあり」に変更
3. アプリケーションをビルドして実行し、バージョン情報ダイアログを出す
4. バージョン情報ダイアログだけを隣のサブモニタに移した状態で最大化

とすると、メインモニタ上に数ピクセルはみ出て表示されてしまいます。

なお、メインダイアログ自体をサブモニタに移した状態で
4の操作を行うと、最大化してもはみ出ません。

マルチモニタを使われているかた、やはり発生しますでしょうか。
それとも、モニタ側のドライバの問題とかが考えられますでしょうか。


引用未解決
トピックタグ
さとし
 さとし
(@さとし)
ゲスト
結合: 13年前
投稿: 2
 

ちょっと状況が違うかもしれませんが
ノートPCで外部モニタをメイン、本体モニタをサブで使用していますが
特にご指摘の現象は出ませんでした。

とりあえずご報告でした。


返信引用
yoh2
 yoh2
(@yoh2)
ゲスト
結合: 13年前
投稿: 7
 

手持ちのいくつかの環境で試してみましたが、プライマリとセカンダリの
どちらのモニタで最大化してもはみ出るようなことはありませんでした。参考まで。

試した環境を以下に列挙します。
x64版のOSでは、x86版ビルドとx64版ビルドの両方を試しました。

■ 開発環境: Visual Studio 2008 と Visual Studio 2010

■ PCその1
プライマリ出力: AMD Radeon HD5870, 1600x1200
セカンダリ出力: 同上, 1440x900, プライマリ出力の右に配置
OSその1: Windows XP Professional SP3 (x86)
OSその2: Windows 7 Ultimate SP2 (x64)

■ PCその2
プライマリ出力: Intel HD Graphics, 1280x800
セカンダリ出力: Century LCD-8000U (USBモニタ), 800x600, プライマリ出力の右に配置
OSその1: Windows XP Professional SP3 (x86) [※]
OSその2: Windows 7 Ultimate SP2 (x86)
OSその3: Windows 7 Ultimate SP2 (x64) [※]

※ セットアップをしくじっていたのか、VS2008 x86版を動かすことができませんでし
た。


返信引用
NOR
 NOR
(@NOR)
ゲスト
結合: 23年前
投稿: 128
Topic starter  

さとしさん、yoh2さん、試していただきありがとうございます。
必ず発生するものではないということがわかり、大変助かりました。

こちらの環境では、3台のXPマシンすべてで発生しています。
ただ、試した環境すべてがGeForceを使っているため、
もしかするとこのへんが絡んでいるのかもしれません。
調査の参考にさせていただきます。

http://firestorage.jp/download/7a64e342656975e541934c636b5a139223621332
(左側がメインダイアログ、右側がサブモニタで最大化したバージョン情報です)
こんな感じでメインモニタに境界部分が表示されてしまうのですが、
これはMFCの問題ではないということなのですね。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

 出張先で見かけたのですが、2画面で表示するモードがあるみたいです。
ウインドウの画面表示の設定を確認した方がいいかも知れませんね。
 あと、ウインドウの画面表示の設定でディスプレイに合わせて自動調節みたいな
設定があったかと思います。
無駄かも知れませんが、やってみるのもいいと思います。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

訂正します
>2画面で表示するモードがあるみたいです。
二つのディスプレイで1画面を表示するモードがあるみたいです。


返信引用
yoh2
 yoh2
(@yoh2)
ゲスト
結合: 13年前
投稿: 7
 

NORさんのスクリーンショットを見て、ひとつ勘違いしていたことに気付きました。
描画領域がはみ出ていなかったため、はみ出なかったと書きましたが、枠はNORさんの環境
のようにはみ出ていました。

訂正しつつまとめるとこうなります。

1. 以前の投稿のPCその1とその2の両方で発生。
2. XPのLuna環境でのみ発生。クラシックモードや7のAeroでは発生せず。
3. メインウインドウとバージョン情報ダイアログが別のモニタ上にあると発生する(*)。

(*) NORさんの手順と逆に、セカンダリ画面にメインウインドウ、プライマリ画面にバージ
ョン情報でも発生しました。

親ウインドウがあると枠を描いてしまっているように見えます。
まだ試していないのですが、時間があれば3画面でも様子を見てみたいと思います。


返信引用
NOR
 NOR
(@NOR)
ゲスト
結合: 23年前
投稿: 128
Topic starter  

ITOさん、yoh2さん、情報ありがとうございます。
また、スクリーンショットを見ていただき、ありがとうございます。

やはりXPでは発生するということですか。

Windowsの最大化は、ウィンドウ領域を画面外まで数ピクセル広げた上で
枠部分を隠して表示しているようなので(GetWindowRect()が1288×1032になった)、
その枠部分が表示されてしまっているということのようです。

MFCの問題というよりは、XPのバグかもしれません。

実際のアプリでは、VC6の「プロパティ」のような、
メインウィンドウから表示するモードレスダイアログを作っていて、
これに最大化機能も入れたところ、今回のような問題が起きてしまいました。

なにかご存じのかたがいらっしゃれば、引き続き情報いただければと思います。


返信引用
yoh2
 yoh2
(@yoh2)
ゲスト
結合: 13年前
投稿: 7
 

時間と興味があったので、3画面の場合などの挙動を調べてみました。

前に書いた、親ウインドウのあるディスプレイに枠が表示されている
のではないかという推測は間違っていたようです。
子ウインドウが最大化されたディスプレイの外側に親ウインドウが
いれば枠が描かれているのでしょうかね。

実害はなさそうなので、対処方法は「気にしない」に一票。

以下実験結果です。

ディスプレイを
┌─┐┌─┐┌─┐
│1││2││3│
└─┘└─┘└─┘
という位置関係にして、ウインドウの位置を変えながら試行。

メインウインドウ: 1
情報ダイアログボックス: 2で最大化
→ 1と3に枠が表示される。

メインウインドウ: 1
情報ダイアログボックス: 3で最大化
→ 2に枠が表示される。

メインウインドウ: 基本的に1だが、クライアント領域を
わずかに2にはみ出させる
情報ダイアログボックス: 1で最大化
→ 2に枠が表示される。なお、メインウインドウの枠だけが
はみ出た場合はダイアログボックスの枠が表示されなかった。

メインウインドウ: 基本的に1だが、クライアント領域を
わずかに左 (画面外) にはみ出させる
情報ダイアログボックス: 1で最大化
→ 2に枠が表示される。なお、メインウインドウの枠だけが
はみ出た場合はダイアログボックスの枠が表示されなかった。


返信引用
NOR
 NOR
(@NOR)
ゲスト
結合: 23年前
投稿: 128
Topic starter  

yoh2さん、詳しい検証ありがとうございます。
3画面のテスト環境は無いので、とても助かります。

前述のモードレスダイアログをサブモニタで使っているユーザから
「ちょっとはみ出てるよ」と指摘されたものでしたが、
現状では「XP自体のバグっぽいです」と逃げておこうかと思います。

ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました