グラフィックス

描画関数は、デバイスコンテキスト hdc へ描きます。 C++のクラスを使ってこれをまとめることにします。

MyDC クラス("MyDC.h")

今は説明のため、直線だけですが、今後増えていきます。

#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 ですが、座標変換のためです。 実際の式は別の所で書き換えます。

使用例(win142)

"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>

ところで、プロジェクトフォルダにあるインクルードファイルは "" として区別しています。


[前] [目次] [次]