刚学mfc就出错
在doc类里面定义了数据,在view的ondraw中画圆.
可是运行程序,鼠标左键单击,出现一个圆,再次单击,程序就无响应了,而且cpu占用超高
以下是代码:
// RingDoc.h : CRingDoc 类的接口
//
#include <afxtempl.h>
#pragma once
typedef CArray<CPoint> PointArray;
typedef CArray<COLORREF> ColorArray;
static const COLORREF WHITE=RGB(255,255,255);
static const COLORREF GREY=RGB(128,128,128);
static const COLORREF BLACK=RGB(0,0,0);
class CRingDoc : public CDocument
{
protected: // 仅从序列化创建
CRingDoc();
DECLARE_DYNCREATE(CRingDoc)
// 特性
public:
// 操作
public:
// 重写
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
#ifdef SHARED_HANDLERS
virtual void InitializeSearchContent();
virtual void OnDrawThumbnail(CDC& dc, LPRECT lprcBounds);
#endif // SHARED_HANDLERS
// 实现
public:
virtual ~CRingDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// 生成的消息映射函数
protected:
DECLARE_MESSAGE_MAP()
#ifdef SHARED_HANDLERS
// 用于为搜索处理程序设置搜索内容的 Helper 函数
void SetSearchContent(const CString& value);
#endif // SHARED_HANDLERS
private:
PointArray m_pointArray;
ColorArray m_colorArray;
public:
void MouseDown(CPoint point);
PointArray& GetPointArray(){return m_pointArray;}
ColorArray& GetColorArray(){return m_colorArray;}
};
void CRingDoc::MouseDown(CPoint point)
{
m_pointArray.Add(point);
m_colorArray.Add(WHITE);
UpdateAllViews(NULL);
}
// CRingView 绘制
void CRingView::OnDraw(CDC* pDC)
{
CRingDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
PointArray& pointArray=pDoc->GetPointArray();
ColorArray& colorArray=pDoc->GetColorArray();
int iSize=(int)pointArray.GetSize();
for (int iIndex=0;iIndex<iSize;iSize++)
{
CPoint point=pointArray[iIndex];
COLORREF color=colorArray[iIndex];
CPen pen(PS_SOLID,0,BLACK);
CBrush brush(color);
pDC->Ellipse(point.x-10,point.y-10,point.x+10,point.y+10);
CPen* pOldPen=pDC->SelectObject(&pen);
CBrush* pOldBrush=pDC->SelectObject(&brush);
}
}