MFCのCArrayで独自クラスを利用する際の書き方
MFCタグが作れなかったのでC++タグで失礼いたします。(2014/12/17 16時27分提案→MFCタグ追加済)
今MFCを学んでおります。
現在MFCのSDIで図形作成プログラムを作っていて、Viewにすべてのデータを持たせてDocに保存していましたが、データが増えてきたので別クラスにてデータを管理しようとしています。
保存するデータとして
・図形が何個あるのか
・図形の座標
を考えており、数を制限したくないので可変にするためにCArrayで管理しようとしています。
CArrayを独自クラスで利用する際の書き方がよくわかりませんので下記コードだとどうなるか具体的に教えていただければ幸いです。
CPaintData.h
class CPaintData : public CObject
{
public:
CPaintData();
virtual ~CPaintData();
private:
int m_nFigureNumber; // 図形の数
double m_dCoodinateX; // 各種X座標
double m_dCoodinateY; // 各種Y座標
public:
void setFigureNumber(int Number); //現在の図形の数
double getFigureNumber(void);
void setCoodinateX(CPoint point); //現在のX座標の取得
double getCoodinateX(void);
void setCoodinateY(CPoint point); //現在のY座標の取得
double getCoodinateY(void);
};
CPaintData.cpp
CPaintData::CPaintData()
: m_dCoodinateX(0)
{
}
CPaintData::~CPaintData()
{
}
void CPaintData::setCoodinateX(CPoint point) // 現在のX座標の取得
{
m_dCoodinateX = point.x;
}
double CPaintData::getCoodinateX(void)
{
return m_dCoodinateX;
}
(↑同じような形なので図形の数とY座標は省略)
CPaintView.h
#include "atltypes.h"
#include "PaintData.h"
enum{
DRAW_LINE = 1,
DRAW_TRIANGLE,
DRAW_SQUARE,
DRAW_CIRCLE_CONTINUE,
DRAW_POLYLINE_CONTINUE
};
class CScrollViewPaintView : public CView
{
public:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
CArray<CPaintData, CPaintData&> m_arDataArray;
};
(↑必要そうなところだけ抜粋)
CPaintView.cpp
#include "stdafx.h"
#include "Paint.h"
#include "PaintDoc.h"
#include "PaintView.h"
(省略)
void CScrollViewPaintView::OnLButtonDown(UINT nFlags, CPoint point) //左クリック時の処理
{
if(m_nType == DRAW_CIRCLE){ //メニューで円を選んだとき
CPaintDoc* pDoc = GetDocument(); //Docを使うために必要
ASSERT_VALID(pDoc);
CPaintData PaintData; //このあたりからよくわからない
PaintData.setCoodinateX(point.x); //setできてる模様?
PaintData.setCoodinateY(point.y); //setできてる模様?
PaintData.getCoodinateX(); //getできるけどVSで見るとm_arDataArrayに入っていない模様でどこからとってるのか謎
PaintData.getCoodinateY(); //getできてない?
//ここでクリックが2回目なら、1回目を中心、2回目を外周のどこかとする円を書く処理にとばす
//図形の個数をプラス1する
pDoc->SetModifiedFlag(); //Docに保存
}
}
CPaintDoc(今回は関係ないはずなので省略)
開発環境はwin7 64bit VS2010です。
よろしくおねがいいたします。