基于状态机模型的功能类机制(——宫法明 )
1.纯虚函数:定义一个父类:CProduction ------------------产品类
class CProduction
{
public:
CProduction();
virtual ~CProduction();
//数据
public:
COLORREF color;//颜色
int size;//线条粗细
//操作
public:
virtual void draw(CDC *pDC)=0;//纯虚函数
};
2.新建通用类,实现显示状态栏消息
void CGlobleAgent::showMsgOnStatusBar(CString msg)
{
CMainFrame *pFrame=(CMainFrame*)AfxGetMainWnd();
CStatusBar *pSb=pFrame->m_wndStatusBar;
pSb->SetPaneText(0,msg);
}
3.新建类CProLine和CProPoint ,继承CProduction,重载draw(CDC *pDC);
void CProLine::draw(CDC *pDC)
{
//AfxMessageBox("i am a point!");
CGlobleAgent::showMsgOnStatusBar("i am a line");
}
void CProPoint::draw(CDC *pDC)
{
//AfxMessageBox("i am a point!");
CGlobleAgent::showMsgOnStatusBar("i am a point!");
}
4.纯虚函数:定义一个父类:CWorke ------------------工人类
//响应鼠标消息函数
class CWorker
{
public:
CWorker();
virtual ~CWorker();
public:
virtual void OnLButtonDown(UINT nFlags, CPoint point)=0;
virtual void OnLButtonUp(UINT nFlags, CPoint point)=0;
virtual void OnMouseMove(UINT nFlags, CPoint point)=0;
};
5.派生两个工人类:
class CWorkerPoint : public CWorker
{
public:
CWorkerPoint();
virtual ~CWorkerPoint();
public:
void OnLButtonDown(UINT nFlags, CPoint point);
void OnLButtonUp(UINT nFlags, CPoint point);
void OnMouseMove(UINT nFlags, CPoint point);
};
class CWorkerLine : public CWorker
{
public:
CWorkerLine();
virtual ~CWorkerLine();
public:
void OnLButtonDown(UINT nFlags, CPoint point);
void OnLButtonUp(UINT nFlags, CPoint point);
void OnMouseMove(UINT nFlags, CPoint point);
};
6.doc类中存放数据:并初始化
public CDocument
// Attributes
public:
CProduction *prodution[1000];
CWorker *working;//正在工作中的工人
添加函数:
void CTest422Doc::setworker(CWorker *worker)
{
if(worker!=NULL)
{
delete working;
}
working=worker;
}
7.在工具栏中添加两个画点和画线的按钮
...