当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 查看MFC中与CListCtrl和CListView相关的源码时发现,CListView派生自CWnd->CView->CCtrlView,而CListCtrl则直接派生自CWnd类,而CListView::GetListCtrl函数居然仅仅用了一句 return *(CListC...
 

 

 ·lava的伪指令- -    »显示摘要«
    摘要: 虚拟指令意义 (括号内代码为注释。名称下的为同义代码,有相同的意思,主要是为了wqx里书写方便) 名称 寻址方式 字节码 代码格式 伪代码表示1.ph1 立即 ph1 #num [sp]<-num,0,0,0; sp+=4; (栈单元大小为4bytes,不够的部分用0补齐,下同) (phs) 直接 ph1 addr [sp]<-{addr},0,0,0; sp+=4......
 ·linux shell    »显示摘要«
    摘要: 1. 也谈在unix系统中杀死相关终端的进程 2. 从 ifconfig 中得到 ip地址 3. 赶走一些你不希望进入的用户 4. shell编程 5. bash中对变量的操作 6. bash中的特殊字符 7. bash中的变量 8. bash最常见的激活模式 9. shell编程例子 ......


CListView::GetListCtrl是如何将CListView*转换为CListCtrl*的
  查看mfc中与clistctrl与clistview相关的源码时发现,clistview派生自cwnd->cview->cctrlview,而clistctrl则直接派生自cwnd类,而clistview::getlistctrl函数居然仅仅用了一句 return *(clistctrl*)this; 将clistview活生生的转换成了clistctrl,百思不得其解,后在csdn论坛中向众高手求助,终于明白了个中原由.

  csdn论坛求助帖地址:http://community.csdn.net/expert/topic/3542/3542830.xml?temp=.3308374 【程序编程相关:Linux/Unix 下对文件操作的学习

【推荐阅读:取得一个透明颜色

【扩展信息:ListView的使用

  原帖内容如下:

主  题:  mfc中的代码,不敢相信自己会c++了........

 

作  者:  qrlvls (airesearcher) 

信 誉 值:  110

所属论坛:  vc/mfc 界面

问题点数:  200

回复次数:  25

发表时间:  2004-11-11 11:44:52

  _afxcview_inline clistctrl& clistview::getlistctrl() const

 { return *(clistctrl*)this; }

  从上面代码来看,clistview的指针是可以强制转换成clistctrl指针的

  但是看过mfc中代码后发现,clistview派生自cwnd->cview->cctrlview

  而clistctrl直接派生自cwnd,cwnd中没有getlistctrl这样的函数,而且clistview的实现中也没有重载clistctrl强制转换操作符

  现在郁闷中.....求解!   回复人: happyparrot(快乐鹦鹉) ( ) 信誉:155  2004-11-11 11:57:29  得分:0 

  指针的强制转换不需要有什么强制转换函数.

  只需要两个指针对象的空间顺序兼容就可以了.

 

回复人: dentistrydoctor(雅克医生<改行做程序员了>) ( ) 信誉:162  2004-11-11 11:58:08  得分:0 

bool cctrlview::precreatewindow(createstruct& cs)

{

 assert(cs.lpszclass == null);

 cs.lpszclass = m_strclass;    // initialize common controls

 verify(afxdeferregisterclass(afx_wndcommctls_reg));

 afxdeferregisterclass(afx_wndcommctlsnew_reg);    // map default cview style to default style

 // ws_border is insignificant

 if ((cs.style | ws_border) == afx_ws_default_view)

  cs.style = m_dwdefaultstyle & (cs.style | ~ws_border);    return cview::precreatewindow(cs);

}

    实际上 cctrlview 直接以 c_listview (对于ctreeviewctrl就是wc_tree) 创建的, 所以可以这样认为clistview实际上也是clistctrl的派生类,所以那样转换就没有任何问题. 

  这是mfc为了避免多继续而采用的变通方式.

 

class afx_novtable cctrlview : public cview     可能与cctrlview没有虚函数表有关吧,因为一般的成函数并不占其实例的内存空间,并且clistview汉有任务成员变量,所以这样应该是安全的.

 

回复人: roger_ding(海天一色) ( ) 信誉:103  2004-11-11 12:49:22  得分:0 

   先说下,clistctrl的类中只继承了两个虚函数,如下

  virtual void drawitem(lpdrawitemstruct lpdrawitemstruct);


...   下一页
    摘要:静态页面的锚点问题应该都不会有什么问题,今天遇到一个关于动态数据显示页面的锚点问题,研究了一下,拿出来和大家分享。 锚点是“top”,可以放在页面的任何位置,一般是页首。程序红色部分是关键,就是对锚点出现的判断,我设置的数值是4,意思是出现4个动态数据就出现一个锚点,少于4个时因为还在同一个页面,就不需要有锚点出现,这个数值可以根据实际情况进行修改。为了对页面进行进行美化......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE