Step 2. データのグラフ表示
読み込んだデータをグラフ表示します。
1. OnDraw 関数
ほかにもやり方はあるのでしょうが画面ひとつだけなら OnDraw 関数に描画関係を書くのがいいのだと思います。
OnDraw 関数は ****View.cpp (****はプロジェクト名)で見つかります。
Step 1 で読み込んだデータを (100,50)-(650,350) の枠内に表示する例を示します。
x, y データの最大値、最小値をどこか(ファイルを読み込むときで良いと思います)で求めておいてください。
void CStep1View::OnDraw(CDC* pDC)
{
CStep1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。
int xt, yt;
char name[20], *t1;
for (int i=0; i=Xmin && x[i]<=Xmax && y[i]>=Ymin && y[i]<=Ymax) {
xt=(int) 550*(x[i]-Xmin)/(Xmax-Xmin)+100;
yt=(int) -300*(y[i]-Ymin)/(Ymax-Ymin)+350;
pDC->SetPixel(xt,yt,RGB(0,0,255));
}
}
// pDC->Rectangle(100,50,650,350);
if (ndata>0) {
CBrush NewBrush;
NewBrush.CreateSolidBrush(RGB(255,0,0));
CBrush* OldBrush=pDC->SelectObject(&NewBrush);
CRect DRect(100,50,650,350);
pDC->FrameRect(DRect, &NewBrush);
pDC->SelectObject(OldBrush);
NewBrush.DeleteObject();
pDC->TextOut(250,30, "VC++ for Chemist");
t1 = gcvt(Xmin, 10, name);
pDC->TextOut(100,360, t1);
t1 = gcvt(Xmax, 10, name);
pDC->TextOut(640,360, t1);
pDC->SetTextColor(RGB(255,0,0));
t1 = gcvt(Ymax, 10, name);
pDC->TextOut(40,50, t1);
t1 = gcvt(Ymin, 10, name);
pDC->TextOut(40,330, t1);
}
}
2. 描画の関数
一番簡単に使えるのが SetPixel で引数には座標と色を指定します。BasicのPsetと同じように使えます。次に簡単なのが MoveTo(x1,y1) とLineTo(x2,y2) の組み合わせで (x1,y1)から(x2,y2)までの線を引きます。
Rectangle(x1,y1,x2,y2) は4角形を描画します。
その他の4角形を書いたり(FrameRect, FillRect など)や楕円を書いたり(Ellipse)するには「新しいペンやブラシを作り、古いペンやブラシのアドレスを控え、使ったあとは古いペンやブラシに持ち替え、新しいペンやブラシの削除をする」という面倒(?)な操作が必要なようです。
3. 文字の出力
TextOut 関数により出力します。引数は出力する位置(座標)と文字列です。ここではx,y軸の最大値、最小値を出力しています。メッセージボックスを利用しての文字の出力は Step 5. で扱います。
4. 応用編