tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: 塗りつぶし(黒)の円をPC画面中央に配置する
投稿日: 2015/04/11(Sat) 02:10
投稿者魔界の仮面弁士
> PC画面の中央に半径10cmの塗りつぶしの円を書きたいのですが、

自フォーム上に描くのでしょうか。
それとも他のアプリの上に描くのでしょうか。


前者だとすれば、最大化表示したフォームの上に、OvalShape コントロールを
貼っておけば済みそうです。もちろん描画しても良いですけど。

後者だとすれば、案としては2つ。一つは下記のように、CopyFromScreen で
現在の画面情報を自フォーム上の上に写し取り、その上に描く方法。
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=9839&page=0
もう一つは少々面倒ですが、自フォーム以外の場所に直接描く方法。具体的には
GetDC API に IntPtr.Zero を渡してプライマリモニタのDCを取得し、
そこに Ellipse API で塗りつぶすという方法です。お奨めはしませんけど。


問題があるとすれば、描画そのものよりも「半径10cm」という指定についですね。
通常であれば、たとえば 300x300 ドットなどのような指定を指定行いたいところですが、
今回は物理cmで指定されていますので、描画サイズを逆算しないといけません。


たとえば、FullHD(1920x1080)の13インチモニタに描画するとすれば、この場合、
10cm というのは、約666ドット相当になる計算ですよね。

ところが、同じ13インチモニタでも、解像度がHD(1366x768)の画面を使っているとすれば、
その半径 666 ドットの画像が、大きめ(14cm)に表示されてしまう事になります。

解像度が同じモニタだったとしても、液晶の物理サイズが異なれば同様で、
11インチの FullHD なら、8.5cm 相当のサイズに映し出されますし、
17インチであれば 13cm になってしまうわけです。これらの点を吸収せねばなりませんね。

画面解像度からの算出方法はこちら。
http://matome.naver.jp/odai/2136077252002168201


画面の解像度(ドット数)については、Screen.PrimaryScreen.Bounds.Width などで
調べられるのですが、モニタのインチ数というか物理サイズまでは調べられません。
ですから、課題にある「10cm」を満たすためには、実行時に、ユーザーにモニタサイズを
入力してもらうなどしないと、算出することができないと思います。


> どのようなプログラムを書いたら良いかご存知の方はいませんでしょうか?
具体的にはどこまで出来ていて、どこが分からないのでしょうか?

ここの掲示板の利用ルールにもありますように、代わりにプログラムを書いてほしい、という
丸投げな話だとしたら流石に論外ですが、分からない点を明確にして理解したいというのなら
可能な範囲で協力しますよ。


> これが書けないと私の大学の卒業がかなり怪しくなります。
ん? 今日は4月11日。まだ新学期が始まったばかりですよね。
たとえ最高学年であったとしても、3月までまだ十分日数があるのでは…。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。