描画関数は、デバイスコンテキスト hdc へ描きます。 C++のクラスを使ってこれをまとめることにします。
今は説明のため、直線だけですが、今後増えていきます。
#pragma once
//
// MyDC クラス(デバイスコンテキスト)
// MyDC.h
class MyDC{
private:
HDC hdc;
// 座標変換
int px(double x, double y){ return (int)x; }
int py(double x, double y){ return (int)y; }
public:
// コンストラクタ
MyDC(HDC hDc){
hdc = hDc;
}
// 直線
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));
}
};
メンバーは hdc です。 コンストラクタでこの hdc に値を代入します。 ですから、MyDCクラスの変数宣言は次のようになります。
MyDC g(hdc);
そして、メソッドは次のように使います。
g.LineTo(100, 100);
このように、クラスを使うことによって hdc を使う関数をまとめることができます。 ところで、メソッド px と py ですが、座標変換のためです。 実際の式は別の所で書き換えます。
"MyApp.h" です。
// // MyApp.h // #include <MyDC.h> class MyApp : public MyMainWnd{ public: // WM_PAINT void wmPaint(HDC hdc){ MyDC g(hdc); // 直線を描く---------------------------- g.MoveTo(10, 10); g.LineTo(100, 100); } };
実行画面です。
hdc に描画しているという感じになります。 さらに、プログラムの可読性が増します。
ところで、"MyDC.h" をインクルードしなければいけません。 面倒なので、"include"フォルダにある "MyMainWnd.h" に書いておきます。
// グラフィックス #include <MyDC.h>
ところで、プロジェクトフォルダにあるインクルードファイルは "" として区別しています。