CToolBar有这样的一个函数
_AFXEXT_INLINE CToolBarCtrl& CToolBar::GetToolBarCtrl() const
{ return *(CToolBarCtrl*)this; }
得到其内隐藏的CToolBarCtrl的引用,怎么this的内容就可以直接变成CToolBarCtrl的引用呢? 真是不可思议阿!
_AFXEXT_INLINE CToolBarCtrl& CToolBar::GetToolBarCtrl() const
{ return *(CToolBarCtrl*)this; }
得到其内隐藏的CToolBarCtrl的引用,怎么this的内容就可以直接变成CToolBarCtrl的引用呢? 真是不可思议阿!
怎么不配套了?
class CControlBar : public CWnd
class CToolBar : public CControlBarclass CToolBarCtrl : public CWnd很匹配啊,都是CWnd中的数据成员!
仅仅是对这些数据的操作不一样!!
照piaorenqian说,CEdit也可以转成CButton阿,都是CWnd派生类阿!
ft
成员函数并不在对象的内存空间中!!!
该函数的目的就是要得到一个CToolBarCtrl对象,CToolBar转过去是要丢失一些数据,但你要明白这些丢掉的数据对CToolBarCtrl来说并不重要,它不需要这些数据!!!
Class CWnd
{
int a;
int b;
}
Class CToolBarCtr : public CWnd
{
//加了几个操作函数,没加自己的另外的数据成员
int Opreate();
}
class CToolBarCtrl : public CWnd
{
int c;
int d;
}
class CToolBar : public CControlBar
{
int e;
int f;
}
现在CToolBar的对象中的数据成员有
(a,b,c,d,e,f)
CToolBarCtr的对象中的数据成员有(a,b)
当CToolBar的对象向CToolBarCtr类型转换时,数据成员(c,d,e,f)
被转换掉了,现在只能取(a,b)两个数据成员,而该两个成员正是
CToolBarCtl所需要的,你说现在有问题吗!!!不知道这样解释,你还有问题吗????
{ return *(CToolBarCtrl*)this; }
主要要的是this的m_hWnd,有了这个东西,就可以和这个窗口发消息了!
所以阿CToolBarCtrl里面的很多成员函数,都是发消息的方式实现的。
这样,从CToolBar得到的CToolBarCtrl,只要其句柄可用,就可以了。