读书人

刚学mfc就出错解决办法

发布时间: 2013-01-26 13:47:04 作者: rapoo

刚学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);
}
}

[解决办法]
iSize是不是数量很大?

如果很大的话,系统肯定受不了的。
[解决办法]
打个断点看看,估计逻辑上有点问题,不可能只画一个圆就出现CPU占用这么高呀。

读书人网 >VC/MFC

热点推荐