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"); } };
実行画面です。