グラフィックス

MyDCクラスです。

MyDC クラス("MyDC.h")

このファイルは、"include" フォルダへ保存します。 また、"MyMainWnd.h" にも書いておきます。 今後も、増えていきます。

#ifndef	___MYDC
#define	___MYDC

//
//	MyDC クラス(デバイスコンテキスト)
//		MyDC
//


class MyDC{
public:
	HDC hdc;
protected:	
	// 座標変換
	double a, b, c, d, p, q;
	int px(double x, double y){
	 	return (int)(a * x + c * y + p);
	}
	int py(double x, double y){
		return (int)(b * x + d * y + q);
	}

public:
	// コンストラクタ
	MyDC(HDC hDc){
		hdc = hDc;
		a = 1;
		b = 0;
		c = 0;
		d = 1;
		p = q = 0;
	}
	
	// 座標変換
	void Trans(double a1, double b1, double c1, double d1, double p1, double q1){
		a = a1;
		b = b1;
		c = c1;
		d = d1;
		p = p1;
		q = q1;
	}
	void Trans(double a1, double b1, double c1, double d1){
		a = a1;
		b = b1;
		c = c1;
		d = d1;
	}
	void Trans(double p1, double q1){
		p = p1;
		q = q1;
	}

	// 文字
	void TextOut(double x, double y, LPCTSTR str){
		::TextOut(hdc, px(x, y), py(x, y), str, lstrlen(str));
	}
	void TextColor(int r, int g, int b){
		SetTextColor(hdc, RGB(r, g, b));
	}
	void TextBkMode(BOOL f){
		if(f == 0){
			SetBkMode(hdc, TRANSPARENT);	// 背景を塗る
		}else{
			SetBkMode(hdc, OPAQUE);	// 背景を塗らない
		}
	}
	// 直線
	void MoveTo(double x, double y){
		MoveToEx(hdc, px(x, y), py(x, y), NULL);
	}
	void LineTo(double x, double y){
		::LineTo(hdc, px(x, y), py(x, y));
	}
	// 長方形
	void Rectangle(double x1, double y1, double x2, double y2){
		::Rectangle(hdc, px(x1, y1), py(x1, y1), px(x2, y2), py(x2, y2));
	}
	// 楕円・円
	void Ellipse(double x1, double y1, double x2, double y2){
		::Ellipse(hdc, px(x1, y1), py(x1, y1), px(x2, y2), py(x2, y2));
	}
	void Circle(double x, double y, double r){
		Ellipse(x - r, y - r, x + r, y + r);
	}

#endif

使用例(win147)

//
// MyApp.h
//

class MyApp : public MyMainWnd{
public:
	// WM_PAINT
	void wmPaint(HDC hdc){
		MyDC g(hdc);

		// 長方形を描く----------------------------
		g.Rectangle(10, 10, 60, 60);
		// 楕円を描く----------------------------
		g.Ellipse(80, 10, 130, 60);
		g.Circle(155, 35, 20);
		// 文字を描く----------------------------
		g.TextBkMode(FALSE);
		g.TextColor(255, 0, 0);
		g.TextOut(180, 10, L"Hello");
	}
};

実行画面です。


[前] [目次] [次]