最大化したときのズレに関して。

タグの編集
投稿者 AIW  (高校生) 投稿日時 2010/5/9 15:55:35
 プログラムを最大化したときの「ずれ」に関してです。初歩的な質問ですみません。

 PCによって画面のサイズが違うのに、どうやってコントロールなどの位置を修正すればよいのでしょうか?

 コントロールならまだDockやらAnchorで何とか成るかもしれませんが、描画とかはどうなるのでしょうか?

 つたない説明で分かりにくいかと思いますが、回答宜しくお願いします。
投稿者 るきお  (社会人) 投稿日時 2010/5/9 17:44:18
こんにちは。

質問の内容がちょっとわかりにくいです。
具体的に困っていることがあればそれを書いていただくか、
そうでなくても何か具体例があったほうがよいと思います。

一般論的には、
AIWさんがおっしゃっているようにDockプロパティやAnchorプロパティがコントロールの配置の問題のほとんどを簡単に解決してくれます。
コントロールではない描画では確かにこれらのプロパティは使用できませんが、考え方としては同じです。

つまり、フォームのサイズが変更された場合、グラフィックをどうしたいのかというポリシーを持って、それをプログラムすることになります。

ポリシーの例1:絶対位置。絶対サイズ。
フォームの大きさにかかわらず、グラフィックはその親コントロール(FormやPictureBoxなど)の左上隅から等距離等サイズで描画する。
→普通にプログラムしてればOK

ポリシーの例2:親コントロールのサイズに比例
親コントロールのサイズが変更された場合、グラフィックのサイズは同じ比率で変更される。
→描画プログラムで座標に比率を掛け算するようにする。
具体的には、親コントロールのPaintイベントで描画するときに、DrawXXX系メソッドの引数の各種座標を固定座標ではなく、比率をかけたものを指定するようにする。

ポリシーの例3:親コントロールの右下隅からの距離が起点。サイズは等サイズで描画
…以下省略。

具体的に書いていただければ、具体的なプログラムも紹介できると思いますよ。


投稿者 AIW  (高校生) 投稿日時 2010/5/9 18:00:19
 るきおさん、回答ありがとうございます。

 具体的には色々あるのですが、肝心なところができてなくて。

 とにかく比率をかけて、具体的なところはなるべく自己解決します。分からなければまた投稿しますm(_ _)m

 ありがとうございました。
投稿者 葉月  (社会人) 投稿日時 2010/5/9 21:02:58
>>PCによって画面のサイズが違うのに、どうやってコントロールなどの位置を修正
私の使用しているモニターは縦長に変えらるので縦と横で表示できない領域があり、
ディスプレイの向きを調整するか自作ツールを最大化にしないと表示されない問題が
あります。
なので、終了したときのフォーム座標をプロパティから呼び出す時に確認します。
一部をサンプルとして掲載します。
注:Me.pointは、Formを表すのではなく、ただのフィールドです。

>サンプル
' ディスプレイの解像度 
Dim rec As System.Drawing.Rectangle = System.Windows.Forms.Screen.PrimaryScreen.Bounds

' 保存されたフォーム座標 
Dim p As System.Drawing.Point = Me.point

If p.X < rec.Width AndAlso p.Y < rec.Height Then
    Return p
End If

Return New System.Drawing.Point(0, 0)




>>描画とかはどうなるのでしょうか?
上記のサンプルにあるPrimaryScreen.Boundsプロパティを使い調整できますが、
コントロールの配置を細かく行うのはめんどくさいです。
PanelをFormにDock、またはAnchorで調整して、Panelに描画するようにします。
Panelと描画するイメージのアスペクト比を調べて描画するようにすれば、
Mciで使うハンドルを渡して処理することも可能です。
詳しくは、提示したURL(VB中学校内のスレッド)を見てください。
投稿者 cupid  (社会人) 投稿日時 2010/5/9 22:57:30
コントロールの位置はともかく、描画なら、つまり線を引くなら、面塗りも含めて、
全て相対座標で処理すればOKです。相対座標の四隅をWindowの四隅に合わせる、
Drawingの基本ですね。単純にやれば縦横比がWindowサイズで変る、つまり絵が歪むから、
普通は短辺に合わせてスケーリングする。余りは余白にするなど色々可能です。
以上は抽象的表現ですが、高校レベルの数学(幾何学?)で十分出来ますよ。
(当方の解釈がはずれていたら御免、ちょっとピントがずれたかもしれない?)
投稿者 AIW  (高校生) 投稿日時 2010/5/15 13:53:18
 お二方ありがとうございました。そして返信送れて申し訳ございませんでした。

 過去ログも見ました。とりあえず理解したつもりです。ありがとうございました。