描画関数は、デバイスコンテキスト 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>
ところで、プロジェクトフォルダにあるインクルードファイルは "" として区別しています。