在c++入门的时候,常常看见很多类的强制性转换,比如看看
CFrameWnd *pFrame = (CFrameWnd*)AfxGetMainWnd();
CView *pView = (CView*)pFrame->GetActiveView(); 再通过pView实现其他的操作等,为什么pView可以实现其他的操作呢?因为很多的视图类都从CView中继承或派生来的,我们就可以通过其他类强制转换到CView来实现。
通过这种方法我们可以实现自己的类派生,从而可以很方便的实现类的通讯。我们可以自己定义类如下:
1.定义一个父类:
class CDrawElement :public CObject
2.定义其他类:
class CArc :public CDrawElement //弧形
class CEllipse:public CDrawElement //椭圆
class CLine:public CDrawElement //直线
class CRectangle:public CDrawElement//矩形
class CText :public CDrawElement//文字
这些类都来自CDrawElement的派生
3.操作方法
我们打算在程序中按照不同顺序绘制各种上面的图形,但是为了对各种图行的控制,对各种图形记录是有必要的,因此我们还需要自己定义一个链表 CPtrList m_ObjectList; // 绘制图像的链表
看看我们是怎样把图形加入到链表中的
CLine* pLine=new CLine;
m_ObjectList.AddTail(pLine); //加入直线
CEllipse* pEllipse=new CEllipse;
m_ObjectList.AddTail(pEllipse); //加入椭圆
CRectangle* pRectangle=new CRectangle;
m_ObjectList.AddTail(pRectangle);//加入矩形
CArc* pArc=new CArc;
m_ObjectList.AddTail(pArc);//加入圆弧
CText* pText=new CText;
m_ObjectList.AddTail(pText); //加入文字
对这些不同的图形,我们怎么去知道他们那种呢?呵呵,现在我们就可以通过强制转换来知道了!
POSITION pos = m_ObjectList.GetHeadPosition();
CDrawElement* pHitItem;
while(pos != NULL)
{
pHitItem=(CDrawElement*)m_ObjectList.GetNext(pos); //通过这里我们就可以控制我们的图形了
}
以前也这样用过!却没有发现这样做的好处,只知道这样做!不过今天发现了,虽然比较拙劣,但是也共享出来,至少是一种很好的方法