MFC中有两个类是跟工具条有关的,分别是CToolBar和CToolBarCtrl.请讲讲CToolBar的成员函数CToolBarCtrl& GetToolBarCtrl( ) const;的原理!附:
该成员函数的实现代码
inline CToolBarCtrl& CToolBar::GetToolBarCtrl() const{
     return *(CToolBarCtrl*)this;
 }

解决方案 »

  1.   

    太招摇了.贴这种问题.稍微懂点C++,再看看CToolBarCtrl的声明及定义就知道了.
      

  2.   

    先转换为CToolBarCtrl指针再解引用,有什么原理可讲?
      

  3.   

    难道你认为从CToolBar强行转化为CToolBarCtrl很好解释吗?
    搞学问最忌讳不懂专懂.
      

  4.   

    CToolBar和CToolBarCtrl 是不是继承关系?I不懂VC,过来骗点分的,嘿嘿
      

  5.   

    cwnd->ccontrolbar->ctoolbar
    cwnd->ctoolbarctrl
      

  6.   

    ctoolbar不是继承自ctoolbarctrl
    ctoolbarctrl也不是继承自ctoolbar
      

  7.   

    hoho
    没人接招吗?上了趟toilet,NND,楼里装修,害的我还得长途跋涉到对面的楼里去解决
      

  8.   

    没看过里面的代码,但我想,是不是Toolbar里有一个成员变量是ToolbarCtrl的引用,且是第一个变量,然后,this即指向自己,也是指向ToolbarCtrl的变量,值是一样,所以,将它强制转换一下,即可得到引用Ctrl实例
      

  9.   

    copy_paste的说法不对.看CToolBar的定义可以知道他并没有这样一个成员.而且,从历史原因来说,CToolBar早于CToolBarCtrl产生.
      

  10.   

    而且,如果真如copy_paste说的那样的话,afx小组应该不会用return *(CToolBarCtrl*)this;
    这么莫明其妙的语法
      

  11.   

    CObject->CWnd->CToolBarCtrl
    CObject->CWnd->CControlBar->CToolBar
    由于CToolBarCtrl本身并无虚函数或数据成员,仅仅是ToolbarWindow32的api封装,
    ctoolbar自然可以直接cast为ctoolbarctrl,还是不懂的话,见msdn里Q&A C++ May 1998。
    btw, 问问题就谦虚点,大家都是义务劳动,说话别太刻薄。
      

  12.   

    kao,bcpl(戒烟直到五颗星)这家伙不好玩,答案揭得太早.
      

  13.   

    呵呵,原来是SB兄啊?请SB兄讲一下CToolBar和CToolBarCtrl的历史,大家欢迎
      

  14.   

    bcpl(戒烟直到五颗星) ,我还没有完全理解这个问题,请问那是相当于把CToolBar转换为CWnd吗?(因为CWnd与CToolBarCtrl同构),还有那篇q&a在那个版本的msdn里面?我怎么能看到?谢谢了!