MyDCクラスです。
このファイルは、"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
//
// 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");
}
};
実行画面です。