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. 応用編