- 締切済み
MFCプログラミング
http://tech.obihiro.ac.jp/~fm/file1/file01.htm 上のURLのプログラムをVisualStudio2008のMFCで書き直したいのですが どうすればいいですか?
- みんなの回答 (10)
- 専門家の回答
みんなの回答
- zwi
- ベストアンサー率56% (730/1282)
>折れ線グラフを関数にするのは前からやってみたのですがうまくいかなかったので質問させていただいたのですが、すみません それは基礎が出来ていないからです。 基礎ができていれば何をすれば良いかは自ずと想像ができるようになります。 ちなみにC++とMFCは非常に難易度が高いプログラミング環境と言って良いと思います。 Excelであれば容易に出来るデータの折れ線グラフや棒グラフ表示をあえてC++とMFCで行う意図をお聞かせ下さい。
- zwi
- ベストアンサー率56% (730/1282)
>ありがとうございます >あと、先ほどの折れ線と棒グラフを関数でわけたいのですが >できますか? なんでも聞いたりサンプルで済ますと技量が伸びませんので自分で考えてみてください。 考えてもわからない部分があれば聞いてもらっても構いませんが、現状は何も調べたりじっくり考えていない様に見えます。 これはMFC以前の基本的なプログラムの作りかたの質問です。C/C++を十分に勉強された人では無いのですよね?まず、そこから勉強されてMFCに入れれたほうが良いと思います。 ちなみに出来るか出来ないかで言えば出来ますが、本当にC++とMFCで良いのか自分の力量に合っているのかVB.NETやC#のほうが難易度が低いと思いますので、そういう所も含めて検討されたほうが良いと思います。
- zwi
- ベストアンサー率56% (730/1282)
>例えば、棒グラフとかです CDC::FillRect等を使えば四角形に塗りつぶす事は可能です。 http://msdn.microsoft.com/ja-jp/library/0421fewx%28v=vs.80%29
補足
ありがとうございます あと、先ほどの折れ線と棒グラフを関数でわけたいのですが できますか?
- zwi
- ベストアンサー率56% (730/1282)
>この後グラフにメモリを打ち込みたいと思うのですが 目盛りならforループで回しながらMoveTo、LineToを使えば良いだけでは?
補足
ありがとうございます 他にもグラフの種類を変えたりできますか? 例えば、棒グラフとかです
- zwi
- ベストアンサー率56% (730/1282)
とりあえず、OnFileOpen()の最後でUpdateAllViews(NULL);すればロード後に画面が更新されるとおもいます。 現状画面の更新が呼び出されないみたいなので。
補足
ありがとうございます ちゃんとグラフが表示されました この後グラフにメモリを打ち込みたいと思うのですが 何かいい方法はありませんかね...
- zwi
- ベストアンサー率56% (730/1282)
>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 メッセージ ハンドラ
- zwi
- ベストアンサー率56% (730/1282)
デバッガのことに一言も答えてもらえないのはなぜでしょう? OnDrawの呼び出しがちゃんと行われているか確認することは非常に重要なのですが。
補足
MoveTo、LineToで確認しましたが何も表示されませんでした グラフの場合と同様にウィンドウの大きさを変えると線が表示されました
- zwi
- ベストアンサー率56% (730/1282)
私の聞いたことの半分は答えてもらっていませんね。 MoveTo,LineToで線が引かれているかデバッガで確認をお願いします。
補足
実行したあとにファイルを開いてウインドウのサイズを変更したら グラフは表示されました。 それなしでグラフが表示されるようにするにはどうしたらいいでしょうか。
- zwi
- ベストアンサー率56% (730/1282)
グラフだけが表示されないのと、文字やXY軸がまったく表示されないのでは意味が全く異なりますが、どちらでしょうか? あとデバッガでトレースはできませんか?
補足
文字は表示されますがXY軸は表示されていないですね
- zwi
- ベストアンサー率56% (730/1282)
MFCの仕様についてはほとんど変わっていないので、そのまま使えると思いますが? ただし、クラスウィザードの仕様は劇的に変わっています。
補足
そのまま使ってみたら実行はできたのですがグラフが表示されませんでした
補足
折れ線グラフを関数にするのは前からやってみたのですがうまくいかなかったので質問させていただいたのですが、すみません