線を描く

今回は線を描いてみましょう。

Polyline

MSDNでWindowsCEのGDIのリファレンスを見ると
windowsで線を描くのに使うLineToやMoveToExといった関数が見つからないので
(カレントポジションの概念がない?)
代わりにPolyLine関数で描画することになります。
なお、線はGDIオブジェクトのペンの影響を受けます。

例のごとく「多重起動の防止」のソースを使いまわしています。
ウィンドウプロシージャ内に以下の内容を追加します。

     //点の座標
     POINT pnt[100];

     pnt[0].x=20 ; pnt[0].y=20;
     pnt[1].x=20 ; pnt[1].y=200;
     pnt[2].x=220 ; pnt[2].y=200;
     pnt[3].x=220 ; pnt[3].y=20;

POINT構造体のpntの配列を用意します。(実際に使うのは3つ分だけですが)
ちなみにPOINT構造体の中身は

typedef struct tagPOINT { // pt
LONG x; LONG y;
} POINT;

と、X,Yという項目があり、この2つをまとめて点[~]の座標として扱います。
0から3までの4点分だけ配列の中身を指定していきます。

               //デバイスコンテキストを取得
               hdc = BeginPaint(hwnd, &paint);
               //初期点0を含む2点間に線を引く
               Polyline(hdc,&pnt[0],2);
               //初期点2を含む2点間に線を引く
               Polyline(hdc,&pnt[2],2);
               //デバイスコンテキストを解放
               EndPaint(hwnd, &paint);
               return 0 ;

Polyline関数で開始点と頂点の数を指定します。
始めのPolylineの場合、点[0]の座標から2点(点[0]と点[1])を結ぶ線を引く、という意味になります。
後のPolylineの場合、点[2]の座標から2点(点[2]と点[3])を結ぶ線を引く、という意味になります。
では実行してみましょう。

PolyLine

始めのPoly~では(20,20)と(20,200)を結ぶ線が、
後のPoly~では(220,200)と(220,20)を結ぶ線が引かれています。
ちなみに、線に使われているデフォルトペンのカラーは黒ですね。

BOOL Polyline( HDC hdc, const POINT *lppt, int cPoints );
第一引数 hdc には、デバイスコンテキストのハンドルを指定します
第二引数 *lppt には、POINT構造体へのポインターを指定します
第三引数 cPoints には、頂点の数を指定します(値は2以上の数でないといけない)

戻り値 成功ならTRUEが、失敗ならFALSEが返ります。

ソースのダウンロード

Polylineで四角形

ではこのPolylineを使って四角形を描いてみましょう。

     pnt[4].x=20 ; pnt[4].y=20;
     //pnt[4]=pnt[0];

先程の点の指定の下に追加します。点[4]の座標自体は点[0]と同じですね。
しかし、Polylineは始点と終点を結んでくれる訳ではないので
わざわざ指定しています。(下のように構造体一括で渡したほうがいいですかね)

               //デバイスコンテキストを取得
               hdc = BeginPaint(hwnd, &paint);
               //始点0から5点分線を引く
               Polyline(hdc,&pnt[0],5);
               //デバイスコンテキストを解放
               EndPaint(hwnd, &paint);

始点[0]から5つの頂点をつなげる線を引きます。
実行すると以下のようになります。

PolyLine

四角形が出来ました。
線を引いているだけなので、当然中身が塗りつぶされたりはしません。

ソースのダウンロード

2005/5/22


戻る