描画

ウィンドウ事始めで作った普通のウィンドウ(以下単にウィンドウ)を扱います。ウィンドウを"作成"したときの、プロジェクト名を思い出しましょう。testでした。この名前のついたフォルダーの中の、ファイル拡張子がdswのファイル(test.dsw)をダブルクリックして、VC++を起動します。画面の左側に、右図のようなワークスペースと呼ばれるウィンドウが現れます。

その下方に3つのタブ(左から、Class View, Resource View, File View)がありますが、このうちFile Viewタブをクリックすると、ワークスペースに含まれているファイルがtree状(ツリー:木が、その枝を広げてゆく様子に似ている)に表示されます。+記号をクリックするにしたがい、以下の図のようにツリーが開いてゆきます。適当に、+記号をクリックしてツリーを開いていったり、ー記号になったところをクリックして、ツリーを閉じたりしてみましょう。

さて、Source Filesのところにある test.cppをダブルクリックすると、このファイルの内容が画面に現れます。画面を下方にスクロールして

void CMainFrame::OnPaint()
{
	CPaintDC dc(this);

	dc.TextOut(0, 0, "Hello World!");
}

なる関数OnPaint()を見つけてください。"Hello World!"の""(コーテーション・マーク:両方とも半角)で囲まれた文字列を変えましょう。日本語でもかまいません。その後、このプログラムを実行します。すなわち、メニューでビルド->実行を選択すると、

のようなダイアログ ボックスが現れますので、ここで、”はい”ボタンをクリックします。コーテーション・マークに囲まれている文字列が現れるはずです。コーテーション・マークを全角のもの ” にするとエラーになりますので注意が必要です。

次に、

void CMainFrame::OnPaint()
{
	CPaintDC dc(this);

	dc.TextOut(0, 0, "適当に!");
	dc.MoveTo(0,0);dc.LineTo(100,100);
}

の様に、dc.MoveTo(0,0);dc.LineTo(100,100);を追加して、プログラムを実行してください。直線が現れます。ウィンドウの白地のところをクライアント領域(client)といいます。この領域の座標に関しては、左上が座標の原点(0,0)で、x軸の正の方向は右手方向、そしてy軸の正の方向は下方となっています。通常の座標系とはy軸の方向が違います。座標(0,0)と(100,100)を適当に変えて、その変化を見ましょう。TextOutの第一引数と第二引数も座標なので、これも適当に変えて見ましょう。これで、TextOut、MoveTo、LineTo関数は、実験データのグラフを描くときに使えることが分かります。

以上の様に、OnPaint()関数の中には、グラフを描画するためのプログラムを書くことになります。

ところで、CPaintDC dc(this)というのは何を意味しているのでしょうか。C++でのクラスとオブジェクト"生成"なのですが(注)、これを理解するための時間がないという方には、とりあえず擬人化して理解してください。すなわち、CPaintDC dc(this)は、"描画の専門家(CPaintDC)であるdcさんに登場願います"ということを意味します。すると、dc.TextOutは"dcさんに、文字を出力してください"という要請をしているという意味にとれます。専門家には、その他、文字列の専門家CStringとかファイルの専門家CFileなどがいます。

注: CPaintDCはクラスの名前です。その定義はMFCが持っていて、その中に隠されています。CPaintDC dc(this);で、dcというオブジェクトが生成されます。オブジェクト生成で作られるもの、すなわちdcを実体またはインスタンスと言います。整数型のiという変数を使うときにint i;としますが、これに似ています。int i;でint(整数)型の実体iを生成していると言えます。intは整数ではなく単なる”型”です。CPaintDC dc(this);でのCPaintDCも”クラスの型”です。実体ではありません。intやCPaintDCと書いても実体がないので使えません。iやdcが実体です。しつこいようですが、クラスは定義だけでは使えません。実体を生成しましょう。


戻る