【HSP】太さのある線を引く【モジュール】
【HSP】太さのある線を引く【モジュール】
#include "gdi32.as"
//
// 描画モジュール
//
#module Draw#undef color
#undef line#define global color(%1=0, %2=0, %3=0) color@hsp %1, %2, %3 : _pen@Draw -1, %1, %2, %3
#define global pen(%1=1) _pen@Draw %1, ginfo_r, ginfo_g, ginfo_b
#define global line(%1=0, %2=0, %3=ginfo_cx, %4=ginfo_cy) _line@Draw %1, %2, %3, %4//
// init 命令
//
#deffunc local _initnWidth = 1
return
//
// pen 命令
//
#deffunc local _pen int _nWidth, int _nRed, int _nGreen, int _nBlue// BMSCR 構造体取得
mref bmscr, 67// ペンの太さがすぐわかるように保存
// 無効な値だったら保存しない仕様に
if (_nWidth > 0) {
nWidth = _nWidth
}// ペンを作成・設定。前のペン削除
CreatePen 0, nWidth, _nRed | (_nGreen << 8) | (_nBlue << 16) // PS_SOLID
bmscr.37 = stat
SelectObject hdc, bmscr.37
DeleteObject statreturn
//
// line 命令 (拡張版)
//
#deffunc local _line int _nXEnd, int _nYEnd, int _nXBegin, int _nYBegin// BMSCR 構造体取得
mref bmscr, 67// 描画
line@hsp _nXEnd, _nYEnd, _nXBegin, _nYBegin// 再描画
/* 描画モード (redraw で指定された値) 取得 */
fl_udraw = bmscr.19 >> 16 & 0xFFFFif (fl_udraw) {
// まずは線の太さを無視してサイズ算出
r_nX = _nXBegin
r_nY = _nYBegin
r_nWidth = _nXEnd - _nXBegin
r_nHeight = _nYEnd - _nYBegin// 幅に線の太さを考慮
if (r_nWidth >= 0) {
r_nX -= nWidth / 2
r_nWidth += nWidth
} else {
r_nX += nWidth / 2
r_nWidth -= nWidth
}// 高さに線の太さを考慮
if (r_nHeight >= 0) {
r_nY -= nWidth / 2
r_nHeight += nWidth
} else {
r_nY += nWidth / 2
r_nHeight -= nWidth
}// 幅か高さが 0 の時に redraw すると、全画面が再描画されて
// しまうので、このような if にする
// 大きさがマイナスの場合もちゃんと処理されるので、
// わざわざ位置を小さい方にしたり、大きさを絶対値にする必要はない
if ((r_nWidth != 0) && (r_nHeight != 0)) {
redraw fl_udraw, r_nX, r_nY, r_nWidth, r_nHeight
}
}return
#global
_init@Draw
//
// メイン
//; redraw 0
color 0x00, 0xFF, 0xFF
boxfcolor 0xFF, 0xFF, 0xFF
pen 40
line 600, 40, 600, 440
line 40, 40
line 40, 440
line 600, 440color 0x00, 0x00, 0xFF
pen 18 : line 260, 260, 280, 300
pen 19 : line 305, 235
pen 20 : line 350, 285
pen 21 : line 325, 340
pen 22 : line 260, 355
pen 23 : line 200, 260
pen 24 : line 300, 170
pen 25 : line 405, 240
pen 26 : line 415, 300
pen 27 : line 375, 370pen 24
line 190, 150, 215, 175
line 260, 100, 270, 130
line 360, 110, 350, 140
line 445, 140, 420, 175; redraw
> チャコさん
ありがとうございます (^^
「ノシ」ぐらい使っちゃっても大丈夫だと思いますよ (^^