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])を結ぶ線を引く、という意味になります。
では実行してみましょう。
始めの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を使って四角形を描いてみましょう。
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つの頂点をつなげる線を引きます。
実行すると以下のようになります。
四角形が出来ました。
線を引いているだけなので、当然中身が塗りつぶされたりはしません。
2005/5/22