如何用vector管理自己写的类——加分贴
//自己写的类
class CDrectangle : public CButton
{
// Construction
public:
CDrectangle(); //构造矩形
CDrectangle(int row,int col,CRect rtgle); //构造矩形2
void DrawEmptyRectangle(CDC *pDC); //绘制矩形框
void DrawRectangle(CDC *pDC); //绘制实心矩形
void OnLeftBtnDown(CDC *pDC,CPoint pnt); //判断pnt是否在本矩形内,是则设置相应的参数并重新绘制相应矩形
public:
virtual ~CDrectangle();
// Generated message map functions
protected:
public:
int m_BtnRowNum; //矩形行号
int m_BtnColumnNum; //矩形列号
BOOL m_IsSelected; //是否选中
CPoint m_StartPt; //矩形起始点
CPoint m_EndPt; //矩形终止点
};
//////////////////////////函数具体实现//////////////////////
//构造矩形
CDrectangle::CDrectangle()
{
m_BtnRowNum=0;
m_BtnColumnNum=0;
m_IsSelected=FALSE;
m_StartPt.x=0;
m_StartPt.y=0;
m_EndPt.x=0;
m_EndPt.y=0;
}
//构造矩形2
CDrectangle::CDrectangle(int row,int col,CRect rtgle)
{
m_BtnRowNum=row;
m_BtnColumnNum=col;
m_IsSelected=FALSE;
m_StartPt.x=rtgle.left;
m_StartPt.y=rtgle.top;
m_EndPt.x=rtgle.right;
m_EndPt.y=rtgle.bottom;
}
//绘制矩形框
void CDrectangle::DrawEmptyRectangle(CDC *pDC)
{
CRect RectangleArea;
CPen penColor; //画笔
CBrush brushTanpt; //画刷
RectangleArea.left=m_StartPt.x;
RectangleArea.top=m_StartPt.y;
RectangleArea.right=m_EndPt.x;
RectangleArea.bottom=m_EndPt.y;
brushTanpt.CreateStockObject(NULL_BRUSH); //透明画刷
penColor.CreatePen(PS_SOLID,1,RGB(107,142,35)); //边框颜色
pDC->SelectObject(penColor);
pDC->SelectObject(brushTanpt);
pDC->Rectangle(RectangleArea);
brushTanpt.DeleteObject();
penColor.DeleteObject();
}
//绘制矩实心矩形
void CDrectangle::DrawRectangle(CDC *pDC)
{
CRect RectangleArea;
CPen penColor; //画笔
CBrush brushColor; //画刷
RectangleArea.left=m_StartPt.x;
RectangleArea.top=m_StartPt.y;
RectangleArea.right=m_EndPt.x;
RectangleArea.bottom=m_EndPt.y;
brushColor.CreateSolidBrush(RGB(154,205,50)); //黄绿色画刷
penColor.CreatePen(PS_SOLID,1,RGB(107,142,35)); //边框颜色
pDC->SelectObject(penColor);
pDC->SelectObject(brushColor);
pDC->Rectangle(RectangleArea);
brushColor.DeleteObject();
penColor.DeleteObject();
}
//判断pnt是否在本矩形内,是则设置相应的参数并重新绘制相应矩形
void CDrectangle::OnLeftBtnDown(CDC *pDC,CPoint pnt)
{
if (pnt.x>=m_StartPt.x && pnt.x<=m_EndPt.x)
{
if (pnt.y>=m_StartPt.y && pnt.y<=m_EndPt.y)
{
if (m_IsSelected==TRUE)
{
m_IsSelected=FALSE;
DrawEmptyRectangle(pDC);
}
else
{
m_IsSelected=TRUE;
DrawRectangle(pDC);
}
}
}
}
//析构
CDrectangle::~CDrectangle()
{}
////////////////////////////////调用//////////////////////////
对话框类中定义
public:
vector<CDrectangle> m_mgle;
对话框初始化的时候调用
void CLklkoDlg::initRectangle()
{
CRect aa(210,10,228,28);
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
CDrectangle regle(i,j,aa);
m_mgle.push_back(regle);
aa.left=aa.right+5;
aa.right=aa.left+18;
}
aa.left=210;
aa.right=aa.left+18;
aa.top=aa.bottom+5;
aa.bottom=aa.top+18;
}
}
对话按钮事件中调用
void CLklkoDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDC *pDC=this->GetDC();
for (int i=0;i<m_mgle.size();i++)
{
m_mgle[i]->DrawEmptyRectangle(pDC);
}
}
vector<CDrectangle> m_mgle;中不用指针为什么会报错呢。
另外:
我想在对话框里面定义了一个CDrectangle的成员变量,而且能在对话框按钮响应函数里面调用带参的构造函数,请问怎么实现呢。我现在在对话框类里面定义了一个CDrectangle的成员变量,但在对话框的按钮响应函数里面在调用带参的构造函数报错。
请问这个问题和上面的那个问题怎么解决呢。小弟谢谢先。