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

http://tech.obihiro.ac.jp/~fm/file1/file01.htm

上のURLのプログラムをVisualStudio2008のMFCで書き直したいのですが
どうすればいいですか?

A 回答 (10件)

>折れ線グラフを関数にするのは前からやってみたのですがうまくいかなかったので質問させていただいたのですが、すみません



それは基礎が出来ていないからです。
基礎ができていれば何をすれば良いかは自ずと想像ができるようになります。

ちなみにC++とMFCは非常に難易度が高いプログラミング環境と言って良いと思います。
Excelであれば容易に出来るデータの折れ線グラフや棒グラフ表示をあえてC++とMFCで行う意図をお聞かせ下さい。
    • good
    • 0

>ありがとうございます


>あと、先ほどの折れ線と棒グラフを関数でわけたいのですが
>できますか?

なんでも聞いたりサンプルで済ますと技量が伸びませんので自分で考えてみてください。
考えてもわからない部分があれば聞いてもらっても構いませんが、現状は何も調べたりじっくり考えていない様に見えます。
これはMFC以前の基本的なプログラムの作りかたの質問です。C/C++を十分に勉強された人では無いのですよね?まず、そこから勉強されてMFCに入れれたほうが良いと思います。

ちなみに出来るか出来ないかで言えば出来ますが、本当にC++とMFCで良いのか自分の力量に合っているのかVB.NETやC#のほうが難易度が低いと思いますので、そういう所も含めて検討されたほうが良いと思います。

この回答への補足

折れ線グラフを関数にするのは前からやってみたのですがうまくいかなかったので質問させていただいたのですが、すみません

補足日時:2012/07/08 14:04
    • good
    • 0

>例えば、棒グラフとかです



CDC::FillRect等を使えば四角形に塗りつぶす事は可能です。
http://msdn.microsoft.com/ja-jp/library/0421fewx …

この回答への補足

ありがとうございます
あと、先ほどの折れ線と棒グラフを関数でわけたいのですが
できますか?

補足日時:2012/07/08 12:56
    • good
    • 0

>この後グラフにメモリを打ち込みたいと思うのですが


目盛りならforループで回しながらMoveTo、LineToを使えば良いだけでは?

この回答への補足

ありがとうございます
他にもグラフの種類を変えたりできますか?
例えば、棒グラフとかです

補足日時:2012/07/08 12:24
    • good
    • 0

とりあえず、OnFileOpen()の最後でUpdateAllViews(NULL);すればロード後に画面が更新されるとおもいます。


現状画面の更新が呼び出されないみたいなので。

この回答への補足

ありがとうございます
ちゃんとグラフが表示されました
この後グラフにメモリを打ち込みたいと思うのですが
何かいい方法はありませんかね...

補足日時:2012/07/08 10:40
    • good
    • 1

>MoveTo、LineToで確認しましたが何も表示されませんでした


>グラフの場合と同様にウィンドウの大きさを変えると線が表示されました

それは、MoveToでブレークはするが何も表示されないということでしょうか?
それともOnDraw自体が呼び出されないと言うことでしょうか?
情報が断片過ぎて、答えようがありません。

とりあえず現状のコードを貼ってもらえますか?

この回答への補足

// graphView.cpp : CgraphView クラスの実装
//

#include "stdafx.h"
#include "graph.h"

#include "graphDoc.h"
#include "graphView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CgraphView

IMPLEMENT_DYNCREATE(CgraphView, CView)

BEGIN_MESSAGE_MAP(CgraphView, CView)
// 標準印刷コマンド
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)

END_MESSAGE_MAP()

// CgraphView コンストラクション/デストラクション

CgraphView::CgraphView()
{
// TODO: 構築コードをここに追加します。

}

CgraphView::~CgraphView()
{
}

BOOL CgraphView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。

return CView::PreCreateWindow(cs);
}

// CgraphView 描画

void CgraphView::OnDraw(CDC* pDC)
{
CgraphDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: この場所にネイティブ データ用の描画コードを追加します。
int x0=50, y0=450, xsp=700, ysp=400, xp, yp ;
// float xmax, ymax;
int DataN=pDoc->DN, i;
pDC->MoveTo(100,100);
pDC->LineTo(100,100);
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); //ペンの変更

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<=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);
}


// CgraphView 印刷

BOOL CgraphView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 既定の印刷準備
return DoPreparePrinting(pInfo);
}

void CgraphView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 印刷前の特別な初期化処理を追加してください。
}

void CgraphView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 印刷後の後処理を追加してください。
}


// CgraphView 診断

#ifdef _DEBUG
void CgraphView::AssertValid() const
{
CView::AssertValid();
}

void CgraphView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CgraphDoc* CgraphView::GetDocument() const // デバッグ以外のバージョンはインラインです。
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CgraphDoc)));
return (CgraphDoc*)m_pDocument;
}
#endif //_DEBUG


// CgraphView メッセージ ハンドラ

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

デバッガのことに一言も答えてもらえないのはなぜでしょう?


OnDrawの呼び出しがちゃんと行われているか確認することは非常に重要なのですが。

この回答への補足

MoveTo、LineToで確認しましたが何も表示されませんでした
グラフの場合と同様にウィンドウの大きさを変えると線が表示されました

補足日時:2012/07/07 18:53
    • good
    • 0

私の聞いたことの半分は答えてもらっていませんね。


MoveTo,LineToで線が引かれているかデバッガで確認をお願いします。

この回答への補足

実行したあとにファイルを開いてウインドウのサイズを変更したら
グラフは表示されました。
それなしでグラフが表示されるようにするにはどうしたらいいでしょうか。

補足日時:2012/07/07 18:30
    • good
    • 0

グラフだけが表示されないのと、文字やXY軸がまったく表示されないのでは意味が全く異なりますが、どちらでしょうか?


あとデバッガでトレースはできませんか?

この回答への補足

文字は表示されますがXY軸は表示されていないですね

補足日時:2012/07/07 15:25
    • good
    • 0

MFCの仕様についてはほとんど変わっていないので、そのまま使えると思いますが?


ただし、クラスウィザードの仕様は劇的に変わっています。

この回答への補足

そのまま使ってみたら実行はできたのですがグラフが表示されませんでした

補足日時:2012/07/07 12:24
    • good
    • 0

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