テクニカルレシピ(Visual C++のレシピ)

Home>>Visual C++>>図形描画 LastUpdate:2009-01-21

図形描画

図形はデバイスコンテキストにAPIを通じて書き込みます。

代表的なAPIは3つなので憶えてしまいましょう。
円は「Ellipse」、四角は「Rectangle」、線は「MoveToとLineTo」です。

具体的には下のサンプルアプリを使って解説します。
Button1を押すと円、
Button2を押すと四角、
Button3を押すと線、を描くように作っています。
なおPictureControlには「CStatic」型の「m_pict」という変数を設定しています。
(ソースファイルはサンプルコードのDraw1.zipにまとめています。)

各Buttonに対するイベントハンドラを下に示します。

Button1のイベントハンドラ関数

最初にm_pictのデバイスコンテキストを取得し(@)、背景を白で塗りつぶしています(A)。
そのあとペンを赤、ブラシを黄色に変え(B)、「Ellipse」を使って円を描いています(C)。
Ellipseの引数の数字を変えると円の大きさが変わります。
ちょっとわかりにく説明ですが、この引数は円に外接する四角形の頂点座標を表します。
初めの2つの引数が左上頂点のx,y座標、次の2つの引数が右下頂点のx,y座標です。

なおCPenやCBrushはこれからよく使うので使い方を憶えてください。
CPenは線の色やスタイルで、CBrushは塗りつぶしの色を表します。
CPenやCBrushはSelectObjectというAPIを使って切り替えます。

CPenのコンストラクタはpen(style,width,color)という形になり、
styleは実線(PS_SOLID)や点線(PS_DOT)、widthは線の太さ、colorは色になります。
(詳細はMSDNのCPenへ)
CBrushのコンストラクタは引数がclolor(色)だけです。
※RGB(r,g,b)は色の指定。rが赤(Red)、gが緑(Green)、bが青(Blue)の強さで、0〜255の数字が入る。

Button2のイベントハンドラ関数

Button2のイベントハンドラはButton1とほとんど一緒です。
違いはペンを青い点線にして、ブラシをグレイにしているところと(@)、
Rectangleを使って四角を描画しているところです(A)。
Rectangleの初めの2つの引数が左上頂点のx,y座標、次の2つの引数が右下頂点のx,y座標になります。

Button3のイベントハンドラ関数

Button3もButton1、Button2に似ています。
ここでは緑の太い線と紫の点線というペンを2つ用意し(@)、
SelectObjectで切り替えています(A)。
線はMoveTo、LineToを組み合わせて引いています(B)。
MoveToの引数は線の始点、LineToの引数は線の終点の座標になります。

それぞれButton1、Button2、Button3を押すと以下のような表示になります。

  

計算処理:前項<< ページの先頭に戻る >>次項:画像表示