この章の目次にもどる
前頁:2.1 型変換にもどる
次頁:2.3 ウィンドウイベントにすすむ

2.2 ディスプレイ・ライブラリ定義

座標を扱う処理に共通に現われる操作を定義したもの。

マクロで定義されているものと、関数になっているものがある。

rectwidth
 
長方形の幅

【形式】

int rectwidth(RECT r)

【パラメータ】

RECT    r   長方形

【リターン値】

長方形の幅を戻す。

【解説】

指定した長方形の r.c.right から r.c.left を引いた値を戻す。
これはマクロである。

rectheight
 
長方形の高さ

【形式】

int rectheight(RECT r)

【パラメータ】

RECT    r   長方形

【リターン値】

長方形の高さを戻す。

【解説】

指定した長方形の r.c.bottom から r.c.top を引いた値を戻す。
これはマクロである。

setpt
 
PNTへの値設定


【形式】

void    setpt(PNT p, W h, W v)

【パラメータ】

PNT p   値をセットするための点
W   h   水平座標
W   v   垂直座標

【リターン値】

なし

【解説】

h, v の値を p の座標にセットする。

このマクロはブロックとして記述されているので、 if の後の文として書く場合などには注意が必要である。

movept
 
点の移動

【形式】

void    movept(PNT p, W dh, W dv)

【パラメータ】

PNT p   点
W   dh  水平移動量
W   dv  垂直移動量

【リターン値】

なし。

【解説】

p を横に dh、 縦に dv だけ並行移動する。

座標系のオーバーフローに関しては保証しない。

このマクロはブロックとして記述されているので、 if の後の文として書く場合などには注意が必要である。

setrect
 
長方形の座標セット

【形式】

void    setrect(RECT x, W l, W t, W r, W b)

【パラメータ】

RECT    x   セットする長方形
W       l   左(left)座標
W       t   上(top)座標
W       r   右(right)座標
W       b   下(bottom)座標

【リターン値】

なし。

【解説】

l, t, r, b の値を、 それぞれ長方形 xleft, top, right, bottom の座標値にセットする。

このマクロはブロックとして記述されているので、 if の後の文として書く場合などには注意が必要である。

equalrect
 
長方形の比較


【形式】

int equalrect(RECT a, RECT b)

【パラメータ】

RECT    a, b    比較する長方形

【リターン値】

= 1    2 つの長方形が一致した
= 0    2 つの長方形は異なる

【解説】

2 つの長方形 ab が同一のとき 1 となり、同一でないとき 0 となる。

これはマクロである。

emptyrect
 
長方形の空チェック

【形式】

int emptyrect(RECT r)

【パラメータ】

RECT    r   チェックする長方形

【リターン値】

= 1    長方形は空
= 0    長方形である ( 空ではない )

【解説】

長方形 r の幅と高さのどちらか片方でも 0 以下ならば 1 となり、 いずれも 0 より大きいならば 0 となる。

これはマクロである。

sectrect
 
長方形の共通部分チェック


【形式】

int sectrect(RECT a, RECT b)

【パラメータ】

RECT    a, b    比較する長方形

【リターン値】

= 1    2 つの長方形に共通部分がある
= 0    2 つの長方形に共通部分はない

【解説】

2 つの長方形 ab の共通部分が空でないとき 1 となり、 空のとき 0 となる。これはマクロである。

inrect
 
点の長方形への包含チェック

【形式】

int inrect(RECT r, PNT p)

【パラメータ】

RECT    r   範囲を表わす長方形
PNT     p   チェックする点

【リターン値】

= 1    p が r に含まれている
= 0    p は r に含まれていない

【解説】

p が長方形 r に含まれているとき 1 となり、 含まれていないとき 0 となる。これはマクロである。

nullrect
 
長方形の空化

【形式】

void    nullrect(RECT r)

【パラメータ】

RECT    r   長方形

【リターン値】

なし

【解説】

長方形 r のすべての座標値を 0 にセットする。

このマクロはブロックとして記述されているので、 if の後の文として書く場合などには注意が必要である。

genrect
 
長方形の生成

【形式】

void    genrect(RECT *rp, W h0, W v0, W h1, W v1)

【パラメータ】

RECT   *rp  値をセットするための長方形領域へのポインタ
W       h0  水平座標値0
W       v0  垂直座標値0
W       h1  水平座標値1
W       v1  垂直座標値1

【リターン値】

なし

【解説】

2 つの点 (h0, v0)、(h1, v1) を対角点に持つ長方形を生成し、 rp で指定した領域に格納する。

gensquare
 
正方形の生成

【形式】

void    gensquare(RECT *rp, W h0, W v0, W h1, W v1)

【パラメータ】

RECT    *rp 値をセットするための正方形領域へのポインタ
W       h0  水平座標値0
W       v0  垂直座標値0
W       h1  水平座標値1
W       v1  垂直座標値1

【リターン値】

なし

【解説】

2 つの点 (h0, v0), (h1, v1) を対角点に持つ長方形に包含される最大の正方形を生成し、 rp で指定した領域に格納する。 長方形の短辺が正方形の 1 辺となる。
生成される正方形は必ず (h0, v0) (原点)を通るように作られる。
そのため、生成された正方形が元々の長方形のいづれの辺と接するのかは、 原点に対してどの象限に元々の長方形が作られていたのかによって変化する。

moverect
 
長方形の移動


【形式】

RECT*   moverect(RECT *rp, W dh, W dv)

【パラメータ】

RECT    *rp 移動する長方形へのポインタ
W       dh  水平移動量
W       dv  垂直移動量

【リターン値】

長方形へのポインタ ( rp )

【解説】

rp で指定した長方形を横に dh, 縦に dv だけ平行移動する。 座標系のオーバーフローに関しては保証しない。 関数値として rp を戻す。

posrect
 
長方形の位置合わせ

【形式】

RECT*   posrect(RECT *rp, PNT p)

【パラメータ】

RECT    *rp    長方形へのポインタ
PNT       p    左上座標値

【リターン値】

長方形へのポインタ(rp)

【解説】

rp で指定した長方形を、 その左上の点が p で指定した点に一致するように平行移動する。 座標系のオーバーフローに関しては保証しない。 関数値として rp を戻す。

sizerect
 
長方形の変形

【形式】

RECT*   sizerect(RECT *rp, W dh, W dv)

【パラメータ】

RECT   *rp    長方形へのポインタ
W       dh    水平方向への変化量
W       dv    垂直方向への変化量

【リターン値】

長方形へのポインタ( rp )

【解説】

rp で指定した長方形の大きさを左右に dh ずつ、上下に dv ずつ拡大 ( dh, dv > 0 の時 )、 または縮小 ( dh,dv < 0 の時 )する。

長方形の中心位置は変化せず、 長方形の幅は ( 2×dh )、 高さは ( 2×dv ) だけ変化することになる。 座標系のオーバーフロー、 空の長方形に関しては保証しない。 関数値として rp を戻す。

andrect
 
長方形のAND演算

【形式】

RECT*   andrect(RECT *dr, RECT *r1, RECT *r2)

【パラメータ】

 
RECT    *dr         結果を格納する長方形へのポインタ
RECT    *r1, *r2    演算元の領域

【リターン値】

長方形へのポインタ( dr )

【解説】

r1r2 で指定した 2 つの長方形の共通部分を求め、dr で指定した領域に格納する。共通部分が空でない場合は、 関数値は dr となる。 共通部分が空の場合には、 関数値は NULL となり、dr の領域には空の長方形 (0,0,0,0) が格納される。

andrect2
 
長方形のAND演算(2)


【形式】

RECT*   andrect2(RECT *dr, RECT *r2)

【パラメータ】

RECT  *dr   結果を格納する長方形へのポインタ
RECT  *r2   演算のための長方形

【リターン値】

長方形へのポインタ( drp )

【解説】

drr2 で指定した 2 つの長方形の共通部分を求め、dr で指定した領域に格納する。 共通部分が空でない場合は、 関数値は dr となる。 共通部分が空の場合には、 関数値は NULL となり、 dr の領域には空の長方形 (0,0,0,0) が格納される。

この関数は、andrect (dr, dr, r2) と同一である。

andrectlist
 
長方形リストのAND演算


【形式】

RECT*   andrectlist(RECT *drp, RLIST *rlp)

【パラメータ】

RECT    *drp    結果格納先の長方形
RLIST   *rlp    長方形リスト

【リターン値】

長方形へのポインタ( drp )

【解説】

rlp で指定した長方形のリストのすべての要素長方形の共通部分を求め、 drp で指定した領域に格納する。 共通部分が空でない場合は、 関数値は drp となる。 共通部分が空の場合には、 関数値は NULL となり、 drp の領域には空の長方形 (0,0,0,0) が格納される。

orrect
 
長方形のOR演算


【形式】

RECT*   orrect(RECT *drp, RECT *r1, RECT *r2)

【パラメータ】

RECT    *drp        結果を格納する長方形へのポインタ
RECT    *r1, *r2    演算元の領域

【リターン値】

長方形へのポインタ ( drp )

【解説】

r1r2 で指定した 2 つの長方形を包含する最小の長方形を求め、 drp で指定した領域に格納する。

空の長方形は、存在しないものとみなされる。 具体的には、r1 が空の場合には結果は r2 と同じ領域となる。 r1 が空でなく、 r2 が空の場合には、 結果は r1 と同じ領域となる。

関数値は drp となる。

orrect2
 
長方形のOR演算(2)


【形式】

RECT*   orrect2(RECT *drp, RECT *r2)

【パラメータ】

RECT    *drp    結果を格納する長方形へのポインタ
RECT    *r2     演算のための長方形

【リターン値】

長方形へのポインタ ( drp )

【解説】

drpr2 で指定した 2 つの長方形を包含する最小の長方形を求め、 drp で指定した領域に格納する。 空の長方形は、存在しないものとみなされる。 関数値は drp となる。

この関数は、orrect(drp, drp, r2) と同一である。

orrectlist
 
長方形リストのOR演算


【形式】

RECT*   orrectlist(RECT *drp, RLIST *rlp)

【パラメータ】

RECT    *drp    結果格納先の長方形
RLIST   *rlp    長方形リスト

【リターン値】

長方形へのポインタ ( drp )

【解説】

rlp で指定した長方形のリストのすべての要素長方形を包含する最小の長方形を求め、 drp で指定した領域に格納する。 空の長方形は、 存在しないものとみなされる。 関数値は drp となる。

xorrect
 
長方形のXOR演算

【形式】

W   xorrect(RLIST *rlp, RECT *r1, RECT *r2)

【パラメータ】

RLIST   *rlp        結果を格納する長方形リストへのポインタ
RECT    *r1, *r2    演算元の領域

【リターン値】

長方形の数

【解説】

r1 で指定した長方形の中で、 r2 で指定した長方形に含まれない部分を、 いくつかの長方形に分割し、rlp で指定した長方形リストの領域に格納する。

長方形への分割は、まず水平軸に沿って、 次に垂直軸に沿って分割され、 長方形リストには、左上の点の垂直座標が小さい長方形の順 (同じ場合は水平座標が小さい順) に格納される。rlp で指定する領域は、 あらかじめ長方形リストとなっていなければいけない。

長方形の数
図 5 : 長方形の数

関数値として分割した長方形の数 ( N ) が戻り、 長方形リストの先頭から N 個の要素長方形 ( rcomp ) に結果が格納される。 長方形リストのポインタ ( r_next) は一切変更されない。

長方形リストの要素数が、 分割した長方形の数より少ない場合は、 リストの要素数個のみ格納される。

xorrectlist
 
長方形リストのXOR演算


【形式】

W   xorrectlist(RLIST *drlp, RECT *rp, RLIST *srlp)

【パラメータ】

RLIST   *drlp   結果を保持する長方形リストへのポインタ
RECT    *rp     長方形
RLIST   *srlp   長方形リスト

【リターン値】

長方形の数

【解説】

rp で指定した長方形の中で、 srlp で指定した長方形リストに含まれない部分を、 いくつかの長方形に分割し、 drlp で指定した長方形リストの領域に格納する。

長方形への分割は、まず水平軸に沿って、 次に垂直軸に沿って分割され、 長方形リストには、左上の点の垂直座標が小さい長方形の順 (同じ場合は水平座標が小さい順) に格納される。drlp で指定する領域は、 あらかじめ長方形リストとなっていなければいけない。

長方形リストの要素数が、 分割した長方形の数より少ない場合は、 リストの要素数個のみ格納される。

genrectlist
 
長方形リストの生成


【形式】

RLIST*  genrectlist(W n, RLIST *rlp)

【パラメータ】

W          n   長方形リストの要素数
RLIST   *rlp

【リターン値】

長方形リストのポインタ ( rlp または、生成したローカルメモリ)

【解説】

rlp で指定した領域を、 要素数 n の 長方形リストとして初期化し、 そのポインタを戻す。 リスト中の各要素長方形は、(0,0,0,0)に初期化され、 リストのポインタが設定される。 rlp で指定した領域は、n×sizeof(RLIST) の大きさを持っているものとみなされる。

rlp = NULL の時は、 ローカルメモリ領域に要素数 n の 長方形リストを生成、 初期化を行い、そのポインタを関数値として戻す。


この章の目次にもどる
前頁:2.1 型変換にもどる
次頁:2.3 ウィンドウイベントにすすむ