CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

CTreeCtrl中为什麽不能得到具体数据?

楼主jcreatorqijiashe(秋天的童话)2003-08-01 13:35:54 在 VC/MFC / 基础类 提问

我用MFC向导生成一个类似资源管理器的界面我在左面的LeftView中用CFileFind枚举出了当前目录下的所有文件夹,我想实现当用户点击左面的文件夹时,右面的CListView能显示出此文件夹中的所有文件,所以我在LeftView中添加了"void   CLeftView::OnClickItem(NMHDR*   pNMHDR,   LRESULT*   pResult)   "           处理函数用"  
  CTreeCtrl&   mtree=GetTreeCtrl();  
  HTREEITEM   item=mtree.GetSelectedItem();  
  data=mtree.GetItemData(item);"                         <---得到文件夹中的内容  
   
  得到点击的具体item的内容,然后我在"CLeftView::OnDraw(CDC*   pDC)"里面得到右面CListView的指针:"POSITION   pos=pDoc->GetFirstViewPosition();  
  while(pos!=NULL){  
  CView*   pview=pDoc->GetNextView(pos);  
  if(pview->IsKindOf(RUNTIME_CLASS(CBrowserView))){  
  pview->SetWindowText((LPCTSTR)data)"  
   
  但点击一个item后右面的listview中没有反应(我用AfxMessageBox测试是可以得到用户点击的item的,所以我认为是SetWindowText这一段代码的问题),我的做法是不是有问题?如果想实现我的想法,应该怎样做?请指点! 问题点数:0、回复次数:11Top

1 楼jcreatorqijiashe(秋天的童话)回复于 2003-08-01 21:34:49 得分 0

提前!有人知道吗?Top

2 楼fengqinggao(风清高)回复于 2003-08-02 00:30:20 得分 0

你不应该在OnDraw()中处理,就在OnClickItem()中处理好了,或者也许在OnSelChange()函数中处理更好,在OnDraw()中处理的话,只要你的界面有少许便(TreeCtrl的选项没有变)它都会刷新,浪费而且不科学,而OnSelChange()就是在你的选项发生变化后才刷新,这是你所希望的。  
   
  我觉得你的SetWindowText()应该没有问题,主要看你那个data参数是否正确。Top

3 楼myhot(大头河马)回复于 2003-08-02 01:11:53 得分 0

upTop

4 楼jcreatorqijiashe(秋天的童话)回复于 2003-08-03 00:53:28 得分 0

可是OnSelchanged(NMHDR*   pNMHDR,   LRESULT*   pResult)   函数中没有pDoc指针,我怎麽获得pview?就是“POSITION   pos=pDoc->GetFirstViewPosition();  
  while(pos!=NULL){  
  CView*   pview=pDoc->GetNextView(pos);  
  if(pview->IsKindOf(RUNTIME_CLASS(CBrowserView))){  
  pview->SetWindowText((LPCTSTR)data);”  
  就算把函数OnselChanged改成:“CBrowserDoc*   pDoc   =   GetDocument();  
  POSITION   pos=pDoc->GetFirstViewPosition();  
  while(pos!=NULL){  
  CView*   pview=pDoc->GetNextView(pos);  
  if(pview->IsKindOf(RUNTIME_CLASS(CBrowserView))){  
  pview->SetWindowText((LPCTSTR)data);”  
  点击后还是没反应Top

5 楼fengqinggao(风清高)回复于 2003-08-03 01:43:44 得分 0

你跟踪看看,是不是pos=pDoc->GetFirstViewPosition()所得到的pos一开始就是NULL?如果不是看这个语句pview->SetWindowText((LPCTSTR)data)有没有执行?  
   
  还有,data=mtree.GetItemData(item);,这里的data得到的是一个DWORD型的数据啊,肯定不是你想要的,强制转换(LPCTSTR)data得到的是什么?Top

6 楼jcreatorqijiashe(秋天的童话)回复于 2003-08-05 21:44:01 得分 0

可是GetItemData是不是这个用法?他是可以达到点击文件夹后显示文件夹中内容的效果吗?Top

7 楼fengqinggao(风清高)回复于 2003-08-05 22:06:11 得分 0

它怎么知道你的文件夹中有什么东西,得要你赋值啊,用循环赋值吧Top

8 楼huwei6000(三刀)回复于 2003-08-05 22:21:35 得分 0

我想   你可以用   OnSelectionChanged消息机制来处理:  
      在leftview其中引入UpdateAllViews   (...):注意this参数   不可改;  
      在rightview中引入OnUpdate接收就可  
   
  具体如下:  
   
   
      void   CDriveView::OnSelectionChanged(NMHDR*   pNMHDR,   LRESULT*   pResult)    
  {  
          NM_TREEVIEW*   pNMTreeView   =   (NM_TREEVIEW*)   pNMHDR;  
          CString   strPath   =   GetPathFromItem   (pNMTreeView->itemNew.hItem);  
          GetDocument   ()->UpdateAllViews   (this,   0x5A,   (CObject*)   (LPCTSTR)   strPath);  
  *pResult   =   0;  
  }  
   
  void   CFileView::OnUpdate(CView*   pSender,   LPARAM   lHint,   CObject*   pHint)    
  {  
          if   (lHint   ==   0x5A)   {  
  FreeItemMemory   ();  
  GetListCtrl   ().DeleteAllItems   ();  
  Refresh   ((LPCTSTR)   pHint);//自定处理函数  
  return;  
  }  
  CListView::OnUpdate   (pSender,   lHint,   pHint);  
  }  
   
   
   
   
  Top

9 楼he_zhidan(何志丹:www.dzlishi.net,www.vcshare.net)回复于 2003-08-06 09:05:51 得分 0

pview->SetWindowText((LPCTSTR)data)"?  
  CListView  
  分割窗口  
  还是CListCtrl  
   
   
  CListCtrl没有标题  
  分割的窗口也可能没有标题  
  Top

10 楼jcreatorqijiashe(秋天的童话)回复于 2003-08-10 21:55:14 得分 0

不是分割窗口,他们是继承自CListView和CTreeView,我用MFC的向导自动生成的基于Explore界面的程序Top

11 楼jcreatorqijiashe(秋天的童话)回复于 2003-08-10 21:57:47 得分 0

to   huwei6000(三刀):  
   
  我没有CFileView这个类阿Top

相关问题

  • 为什麽Combo Box 控件不显示数据
  • ¥¥%¥% 为什麽? 修改不了数据?越快越好!在线等......
  • 为什麽从sql server中调出来的数据都是竖着显示?
  • 这段有关数据库ADO组件的错误信息是什麽意思?
  • 关于数据库关联的问题,有什麽好的办法??(在线)
  • jsp jdbc为什麽不能把数据insert到sql server 中,也不能从sql server中提取数据?!
  • 中间层服务器为什麽必须安装数据库才能连接其他数据库服务器?
  • 具体的数据仓库开发。。。
  • 连接数据库的具体步骤?
  • 子数据窗口中为什麽filter条件不起作用?急急!!在线等!!!!

关键词

  • 函数
  • 文件夹
  • mtree
  • onselchanged
  • pview
  • pdoc
  • setwindowtext
  • 处理
  • pos
  • 点击

得分解答快速导航

  • 帖主:jcreatorqijiashe

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo