【N88互換モード】ActiveBasicその10【イラネ】
■ このスレッドは過去ログ倉庫に格納されています
0643632 =634=635=637
2008/10/18(土) 19:10:41> 正しくは次
構造体メンバを代入でPOINTAPI変数にするのは分かるんですがめんどくさいでしょ。
だってまたRECTに書き戻してやらないといけないんですよ?
つまり、正しくは
pa.x = Rect.left
pa.y = Rect.top
ScreenToClient( hMainWnd, pa )
Rect.left = pa.x
Rect.top = pa.y
と、ここまで書いて、さらにright, bottomまでやって初めて正解になります。
left, top だけではRECTデータが壊れた状態になるからです。
座標の基準点が変わるたびに別の変数用意するのは馬鹿げてるしね。
だけど、内部構造はPOINTAPIの配列をRECTが内包しているんです。
POINTAPI型の配列数2の配列とRECTの共用体とできれば、正しく座標データにアクセスでき、柔軟に対応できます。
[共用体] [座標]
Rect as RECT
Point[ELM(2)] as POINTAPI
[/共用体]
GetWindowRect( GetDlgItem(hMainWnd,ImageBox1), [座標].Rect )
ScreenToClient( hMainWnd, [座標].Point[0] )
ScreenToClient( hMainWnd, [座標].Point[1] )
memcopyがあればコピーも行数半分にできるんですが、見当たらなかったので
ポインタ渡せないかなといろいろ調べたわけです。
Rect.left As POINTAPIは確かにサイズの違うものですが、
Rect.leftのアドレスをPOINTAPIのポインタ型として宣言はできてもおかしくないんだけどその表記法がちょっと分からなくて。
あー、でも、メモリマップを意識したプログラムは今時のオブジェクト指向とはかけ離れてるかもしれませんね。
でもいいんです。これがやりたかったので。
■ このスレッドは過去ログ倉庫に格納されています