- PR -

XPとWindowsクラシックスタイルで、SIZEが異なる

1
投稿者投稿内容
koko
会議室デビュー日: 2004/09/20
投稿数: 9
投稿日時: 2005-03-16 11:56
いつもお世話になっております。

現在、VB.NET 2003、XPpro(SP2)の環境で、
Windowsアプリケーションを作成しております。

そこで、画面(Form)のSizeプロパティの設定値を
1024,720 とするのを開発ルールとしていたのですが、
画面のプロパティでWindowsXPスタイルの時に上記設定にしていても、
Windowsクラシックスタイルに変更すると、この値が変わってしまう
(1024, 713になる)現象が確認されました。

※しかも、モードを元に戻しても、この値は元には戻りません。
変更するたびに異なる値が表示されます。
おそらく、変更されたサイズで、モードにあわせた値を再計算して
設定しているのではないかとは思われますが。。

メンバーの中にはクラシックモードや、Win2000で開発している人間も
おり、ルールを決めていても微妙に異なるレイアウトになってしまいました。

もちろん、全員のマシンをクラシックに統一して開発することを
ルールにすれば問題そのものは解決されるとは思うのですが、
客先にはXPのイメージでプレゼンしていたりなどもろもろの関係で、
できれば、他の対応解決方法は無いものかと思ってます。

そもそもこの現象の根本原因はどこにあるのでしょうか?
(VisualStudio.net? OS? ディスプレイドライバ?)
その辺がわからないと指摘を受けた際に対応がつらいなと。。;

もしこの現象について、ご存知の方がいらっしゃいましたら、
些細なことでも構いませんので情報を提供していただけたらと思います。

宜しくお願いいたします。m(__)m
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-03-16 12:56
推測ですが、OSの仕様による影響じゃないでしょうか。
Windowsでは画面サイズよりも大きなウィンドウの作成は許可されません。強制的に画面サイズに合わせた大きさ以下にリサイズされます。クラシックスタイル(?)に変更したときに、ウィンドウの装飾部分の影響でサイズが小さくなったのでしょう。
画面のプロパティで様々な画面内の部品のサイズを変更することが出来ます。したがって画面サイズは変更される事を前提にアプリケーションを作成するのが理想でしょう。一度やってみると、そんなに面倒な作業でもないですよ。
さもなくば全員が同じ画面設定のもとで統一して開発するしかないでしょう。もちろん実行環境も同じ設定にしてもらえるという前提。あるいは多少の誤差を許容するつもりで、余裕を持たせた画面レイアウトにするとか。

[ メッセージ編集済み 編集者: 甕星 編集日時 2005-03-16 12:58 ]
koko
会議室デビュー日: 2004/09/20
投稿数: 9
投稿日時: 2005-03-16 14:41
甕星様:

早速のコメントありがとうございます。m(__)m

>Windowsでは画面サイズよりも大きなウィンドウの作成は許可されません。
たしかに横ぴったりに作っていましたので、小さいサイズで確認したところ、
やはり、同様の現象が発生しました。
(300×300 → 300×293 になる。)

どうも、比率というより、縦サイズが7p程小さくなるようなので、
それぞのハードコピーととって比べてみたところ、
タイトルバーがXPスタイルの場合、クラシックよりもやや幅が太いようです。

おそらく、ClientSizeは変えられないので、タイトルバーが太くなった分
トータルのSizeが強制的に変更されているという気がしてきました。
(気がついて見ればなんだそんなことかよ〜って気分です;)

そう考えると、Sizeプロパティで画面サイズを統一している限りは、
同一環境で設定しないと(もしくは、クラシックの場合は7p程縦を短く設定するか?)
駄目な気がします。。
というわけで、再検証して、上記結果とことだということになれば、
それで対応してみることにします。

ありがとうございました。m(__)m
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-03-16 15:03
こんにちは、じゃんぬねっと です。

引用:

どうも、比率というより、縦サイズが7p程小さくなるようなので、
それぞのハードコピーととって比べてみたところ、
タイトルバーがXPスタイルの場合、クラシックよりもやや幅が太いようです。



でしょうね。
MSSTYLE にも因りますが (Luna だったら) 太くなります。

引用:

おそらく、ClientSizeは変えられないので、



設定できますよ? (^^)
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
koko
会議室デビュー日: 2004/09/20
投稿数: 9
投稿日時: 2005-03-22 11:53
じゃんぬねっと様:

コメントありがとうございます。

>> おそらく、ClientSizeは変えられないので、
>設定できますよ? (^^)

えーと、そういう意味ではなく、
Sizeを保持しながら、画面モードを変更すると、
結局ClientSizeが変わることに他ならないので、
ClientSizeを保持して結果、Sizeが変わるのだろうという意味です。

なので、モード変更時にSizeを変更したくない場合に、
それぞれのスタイルに合わせて、誤差分をClientSize側で変更することによって、
調整したりすることも可能なのかもしれませんが、他にもBorderStyleの設定や、
いろんな要素もありますし、そうするとあまり意味のある処理だとは思えないため、
やはり、結論として、Sizeで統一を図る場合は、単一の環境で
確認をすることにしました。
(つまり、環境によってSizeが変わるのはやむなし、ただし、
 同一の環境ではすべての画面が同じSizeになること、ということですね。)

※とすると、異なる環境でレイアウトを統一したい場合は、
 Sizeではなく、ClientSizeをいくつにする、といったルールを決めたほうが
 いいのかもしれませんね。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-03-22 12:24
# 直接の回答ではありませんが。。。

引用:

Windowsでは画面サイズよりも大きなウィンドウの作成は許可されません。強制的に画面サイズに合わせた大きさ以下にリサイズされます。



どのレイヤの話でしょう?
少なくとも、API レベルではそういう制限は無いはずです。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-03-22 12:51
引用:

引用:

Windowsでは画面サイズよりも大きなウィンドウの作成は許可されません。強制的に画面サイズに合わせた大きさ以下にリサイズされます。



どのレイヤの話でしょう?
少なくとも、API レベルではそういう制限は無いはずです。


.Net FrameworkではWidthやHeightプロパティを大きく指定しても、適当に丸められます。でもあらためて確認してみると、画面サイズより微妙に大きな不思議なサイズに丸められていますね・・・。1036x780って何処から算出されたサイズなんだろう・・・。

VB6.0も同様に大きな値を指定すると丸められてしまいます。

長らくAPIを直接使ってなかったのですが、APIだと平気なのですか。

[ メッセージ編集済み 編集者: 甕星 編集日時 2005-03-22 12:52 ]
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-03-22 14:04
引用:
でもあらためて確認してみると、画面サイズより微妙に大きな不思議なサイズに丸められていますね……。1036x780って何処から算出されたサイズなんだろう……。



SystemInformation.MaxWindowTrackSizeをForm.SetBoundsCoreメソッドの中で見てるようですね。
で、MaxWindowTrackSizeはAPIのGetSystemMetrics関数でSM_CXMAXTRACK・SM_CYMAXTRACKを使って取得してるようです。
フォームのWndProcをオーバーライドして、WM_GETMINMAXINFOメッセージを処理すれば
ドラッグでのサイズ変更は問題なくなりますね。
WidthやHeightを直接指定する場合はどうも上手い手を思いつきませんが。
1

スキルアップ/キャリアアップ(JOB@IT)