• ベストアンサー

MFC

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

  • tnk48
  • お礼率9% (7/76)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

だから、うまくいかないのならそのときのコードを示してください。 前回のコードでは、"y"と表示するようになっているので、あなたがその部分をどのように変更して数字を表示するようにしたかは、あなたしかわかりません。また、軸にどんな数字が表示されれば正解なのかも、こちらではわかりません。 CStringのFormatを使っているのなら、そこで与えているデータにiを含む数式を使っているはずなので、 ・iが0のときにどんな数字が表示されればいいのか ・iが増えたとしたら、表示する数字は減るのか増えるのか を考えれば、Formatに与える数式が分かるはずです。

その他の回答 (6)

回答No.6

>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); でしょうか。

tnk48
質問者

お礼

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

tnk48
質問者

補足

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

回答No.5

> str.Format("%d",10); strの内容を変更している部分が、for文の外にあるのですから、何回繰り返したところで内容が変わるはずがありません。

tnk48
質問者

補足

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

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

こっちを放置しないで下さい。 http://okwave.jp/qa/q7576661.html ちゃんとC++を勉強したほうが良いと思いますね。 基礎的なことがちゃんと出来ていません。

回答No.3

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

tnk48
質問者

補足

こんな感じです、どう修正すればいいですかね // 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); }

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

数値を文字列に変換すればいいのです。 MFCのCStringクラスを使った方法もありますが、C/C++の標準関数を使った基本的な方法もあります。 サンプルだけじゃなくて、マニュアルとかも読みましょうよ。 やはり、C++の基本くらいはちゃんと勉強してからにしませんか?

tnk48
質問者

補足

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

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

MoveToで始点へ移動、LineToで終点まで線を書く。 横線は (Xの端,y)-(Xの反対の端,y)で、yを適当に変える 縦線は (x,Yの端)-(x,Yの反対の端)で、xを適当に変える 目盛線を入れるのに、やることはこれだけです。 文字も書きたいのなら、TextOutを使います。 実際の使用例がそのサンプルコードに出てます。 この説明でわからないようなら、まことに申し訳ありませんが、MFCを使うのはやめて別な手段を考えるた方が早いです(Excelのマクロの使い方とか)。 あるいは、プログラミングやC++言語そのものを勉強して基礎を身に付けてから、改めてMFCに挑戦することをお勧めします。

tnk48
質問者

お礼

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

tnk48
質問者

補足

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

関連するQ&A

  • エクセル2007の質問です

    グラフを作成するとき、エクセルのシート上で異なるx軸の数値を合せてグラフを作成することができますでしょうか? 例えば グラフ1 x軸の数値0,2,4,6,8,10 y軸の数値2,4,6,8,10,12 グラフ2 x軸の数値0,1,3,5,7,9,10 y軸の数値2,5,7,9,11,13 という2つのグラフをエクセルシートに貼り付けて、グラフを作成すると、 x軸はグラフ(1)のx軸の数値になり、y軸はグラフ(1)のy軸グラフ2のx軸とy軸となってしまいます。 この二つのグラフを同じグラフにして比較したいのですが、どうすればいいでしょうか。 御教授御願します。

  • エクセルで対数グラフを・・・

    エクセルでX軸を対数メモリでY軸普通に とってグラフをかきたいんですがなぜかかけません どうしたらいいでしょうか どなたかお願いします

  • 4次多項式のグラフ

    4次多項式のグラフをEXCELで書く問題で困っています。 式と完成したグラフはあるのですが、なぜこのグラフになるのか分かりません。 式:F(t)=t^4/4-2*t^3+11*t^2/3-6*t グラフ:y軸が-100~900まで100目盛りづつ、x軸は0~10まで1目盛りづつ グラフにはF(t)とf(t)、2つのグラフがあります。 F(t)は式が与えられているのでなぜこのグラフになるのか理解できますが、f(t)は式もないしなぜこのグラフになるのかわかりません。 f(t)はF(t)のy軸と同じ値(0)から始まりy軸の200辺りで収まっています。 F(t)を計算すると F(t) x軸 0→y軸 0 x軸 1→y軸 -4.0833 x軸 2→y軸 -9.3333 x軸 3→y軸 -18.75 x軸 4→y軸 -29.333 x軸 5→y軸 -32.083 x軸 6→y軸 -12 x軸 7→y軸 51.916 x軸 8→y軸 186.66 x軸 9→y軸 425.25 x軸10→y軸 806.66 になります。 数学は得意ではないので説明が分かりにくいですが、よろしくお願いいたします。

  • エクセル2003 グラフについて

    実験結果より作成したグラフ(Y軸、上に凸の形状)について質問です。 1.X軸の値が「整数0~75」までとってあり、グラフを自動作成すると、数値が2段になり非常に見づらいです。グラフの形状を変えず、X軸のメモリを任意の数値刻みにするのはどうしたら良いですか? 2.Y軸最大値の所からX軸、Y軸に垂線を引き、そこの数値のみ太字、赤字にするのはどうしたらよいでしょうか? 簡単ですが、グラフをキャプチャーして画像加工で理想を示してみました。 分かる方居りましたらよろしくお願いします

  • ☆数学の問題(平行移動)☆

    (1) y= - 4x + 2 のグラフをx軸方向に-3、y軸方向に(?)平行移動させると y= - 4x + 8という関数のグラフが得られる。 (2)y= 4x + (?)のグラフをx軸方向に3、y軸方向に- 2平行移動させると、 y= 4x - 6という関数のグラフが得られる。 (3) y= 2xx - 4 のグラフをx軸方向に(?)、y軸方向に(?)平行移動させると y= 2xx + 8x + 7という関数のグラフが得られる。 (4) y= xx + bx + 1 のグラフをx軸方向に2、y軸方向にdだけ平行移動させると y= xx + x + 2というう関数のグラフが得られる。このとき b=(?)で、d = (?)である。 グラフの平行移動がいまいち理解できなくて・・・ (3)などの「xx」は「xの2乗」を表しています! 解説など付けて頂けると助かります(*´▽`)*´▽`)*´▽`)ノ

  • 2次関数のグラフ

    y=a(x-p)^2+qのグラフは、y=ax^2のグラフをx軸の方向にp、y軸の方向にq平行移動した放物線ですが、pとqの±はどうやって判断しているのですか? 例えば、y=2(x+1)^2-3は、y=2x^2のグラフをx軸に-1、y軸に-3平行移動させたもので、頂点は(-1,-3)です。 y=-2(x+2)^2+3は、y=-2x^2のグラフを、x軸に-2、y軸に3移動させたものです。 教科書無くしちゃってて・・・お願いします。

  • Excelでグラフの作成

    次の表をExcelで折れ線グラフにしたいのですが。 X軸 1      3    6 Y軸 20   30    40 X,Y軸ともそれぞれ3つの変数があります。これをグラフにするとY軸に1,3,6と20,30、40の2つのグラフができてしまします。

  • 関数のグラフ

    y={(m-x)(1+x^2)} /4x をグラフで考える時、どのようなグラフになるのか分かりません。y軸には交わらずx軸にはx=mで交わるということしか分かりません。これはどのようなグラフであり、どうやってグラフで表すのか教えてください。

  • 指数関数のグラフ

    高2の指数関数のグラフについてです。 y=2のx+1乗のグラフを書く時はy=2のx乗のグラフをx軸方向に-1平行移動する と言うのが答えなのですが なぜこのグラフを書く時にy=2×2のx乗だからy=2のx乗のグラフをy軸方向に2倍するという考え方は出来ないのでしょうか。 教えてください。 ちなみに、y=6(1/3)のx+1乗ではy=2(1/3)のx乗に変形し、(1/3)のx乗のグラフをy軸方向に2倍していました。

  • 関数

    2次関数y=x^2-ax+9のグラフがx>0の範囲でx軸と接するときのaの値を求めよ。さらにこのグラフをx軸方向に-2、y軸方向にpだけ平行移動すると、x軸とはx=-1とx=qで、y軸とはy=rで交わる。p、q、rの値を求めよ。 aの値とx軸方向に-2、y軸方向にpだけ平行移動なのでy=(x-1)^2+pのグラフになるのは分かりました。このグラフがx=-1で交わるならx=q=3でも交わる。これはどう考えたのでしょうか(*_*)