dポイントプレゼントキャンペーン実施中!

MFCでグラフを描いてそのx軸とy軸にメモリを入れたいのですが
プログラムでどう書けばいいか教えてください。

A 回答 (7件)

だから、うまくいかないのならそのときのコードを示してください。


前回のコードでは、"y"と表示するようになっているので、あなたがその部分をどのように変更して数字を表示するようにしたかは、あなたしかわかりません。また、軸にどんな数字が表示されれば正解なのかも、こちらではわかりません。

CStringのFormatを使っているのなら、そこで与えているデータにiを含む数式を使っているはずなので、

・iが0のときにどんな数字が表示されればいいのか
・iが増えたとしたら、表示する数字は減るのか増えるのか

を考えれば、Formatに与える数式が分かるはずです。
    • good
    • 0

>for(i=0;i<400;i+=50){


>pDC->MoveTo(50,60+i);
>pDC->LineTo(60,60+i);
>pDC->TextOut(30,50+i,"y");
>}

この部分のことですか?
ループを逆順にするか、y座標の計算を逆にするかですね。

ループを逆にするなら、

for(i=350;0<=i;i-=50)

でしょうか。
y座標の計算を逆にするなら、iの最大値は350で、そのときのy座標が410なので、

pDC->MoveTo(50,410-i);
pDC->LineTo(50,410-i);

でしょうか。

この回答への補足

ループを逆順にしてもy座標の計算を逆にしてもうまく表示されないのですが

補足日時:2012/07/10 20:06
    • good
    • 0
この回答へのお礼

上に書くのをわすれたので
y座標の計算を逆にすれば軸は反転したのですが
数字はそのままの状態になっています
数字を反転する方法はないですか?

お礼日時:2012/07/11 16:14

> str.Format("%d",10);



strの内容を変更している部分が、for文の外にあるのですから、何回繰り返したところで内容が変わるはずがありません。

この回答への補足

ありがとうございます。基本的な間違いでした。
y軸のことに関してなのですがこのままでやると
上から下に数字が打たれていくと思うのですが
それを逆転させる方法などありますかね

補足日時:2012/07/09 19:59
    • good
    • 0

こっちを放置しないで下さい。


http://oshiete.goo.ne.jp/qa/7576661.html

ちゃんとC++を勉強したほうが良いと思いますね。
基礎的なことがちゃんと出来ていません。
    • good
    • 0

> 変換した数値をfor文を使って増やせなくて困っています



「困っています」とだけ書かれても、原因は突き止められませんよ。
どんな結果がほしいときに、どんなコードを書いて、どううまくいかないのかを説明しないと。
よくある間違い例というのは確かにあるので、推測で間違いの内容を指摘できることもあるけど、あなたが実際にどう間違ったコードを書いているのかは、コードを見ないとわかりません。

この回答への補足

こんな感じです、どう修正すればいいですかね

// TODO: この場所にネイティブ データ用の描画コードを追加します。
int x0=50, y0=450, xsp=700, ysp=400, xp, yp ;
// float xmax, ymax;
int DataN=pDoc->DN, i;

pDC->SetTextColor(RGB(0,0,255));
pDC->TextOut(0,0,"グラフ表示");

CPen pc1(PS_SOLID,1,RGB(0,0,0));
CPen pc2(PS_SOLID,2,RGB(0,0,0));

CPen* OldPen=pDC->SelectObject(&pc1);
CString str;
str.Format("%d",10);

if(DataN!=0){
pDC->SelectObject(pc2);
pDC->MoveTo(x0,y0);
pDC->LineTo(x0+xsp,y0);
pDC->MoveTo(x0,y0);
pDC->LineTo(x0 ,y0-ysp);

for(i=0;i<650;i+=50){
pDC->MoveTo(100+i,440);
pDC->LineTo(100+i,450);
pDC->SetTextColor(RGB(0,0,0));
pDC->TextOut(100+i,460,str);
}

for(i=0;i<400;i+=50){
pDC->MoveTo(50,60+i);
pDC->LineTo(60,60+i);
pDC->TextOut(30,50+i,"y");
}

for(i=0;i<=DataN;i++){
xp=(int)(x0+pDoc->Dx[i]/100.0*xsp);
yp=(int)(y0-pDoc->Dy[i]/100.0*ysp);
if(i==0) pDC->MoveTo(xp,yp);
else pDC->LineTo(xp,yp);
}
}
pDC->SelectObject(OldPen);
}

補足日時:2012/07/09 11:20
    • good
    • 0

数値を文字列に変換すればいいのです。


MFCのCStringクラスを使った方法もありますが、C/C++の標準関数を使った基本的な方法もあります。

サンプルだけじゃなくて、マニュアルとかも読みましょうよ。
やはり、C++の基本くらいはちゃんと勉強してからにしませんか?

この回答への補足

数値を文字列に変換するところまではCString strとstr.Formatを使ってできているのですが、変換した数値をfor文を使って増やせなくて困っています

補足日時:2012/07/09 10:22
    • good
    • 0

MoveToで始点へ移動、LineToで終点まで線を書く。


横線は (Xの端,y)-(Xの反対の端,y)で、yを適当に変える
縦線は (x,Yの端)-(x,Yの反対の端)で、xを適当に変える

目盛線を入れるのに、やることはこれだけです。


文字も書きたいのなら、TextOutを使います。
実際の使用例がそのサンプルコードに出てます。



この説明でわからないようなら、まことに申し訳ありませんが、MFCを使うのはやめて別な手段を考えるた方が早いです(Excelのマクロの使い方とか)。
あるいは、プログラミングやC++言語そのものを勉強して基礎を身に付けてから、改めてMFCに挑戦することをお勧めします。

この回答への補足

TextOutで数字を連続的に表示させる場合はどうすればいいですか?

補足日時:2012/07/08 23:07
    • good
    • 0
この回答へのお礼

ちゃんとできました、ありがとうございました

お礼日時:2012/07/08 22:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!