tempad
Readygo技术搜索引擎 >>ASP技术 >> 典型问题:怎么实现两个类之间的变量或函数调用?高分--

典型问题:怎么实现两个类之间的变量或函数调用?高分--

Readygo技术搜索引擎 网络搜索 efish 2008-1-14 6:26:02

典型问题:怎么实现两个类之间的变量或函数调用?高分--

楼主windchase(柠檬)2002-05-14 15:23:32 在 VC/MFC / 基础类 提问

比如我在程序中新建了两个继承于CTreeView的视类,我希望在tree1类中双击节点后能够调用tree2中的maketree()函数,从而使tree2中生成树状结构,我试了很多方法都不行:  
  1:定义一个Ctree2的对象,用对象调用  
        Ctree2   test;   test.maketree();  
        出现错误。  
  2:Ctree2   *test=new   ...  
      但是这样就不是我以前的那个tree2视图了。  
  3:使用消息,但不是很懂,没有成功。且我需要传递参数给tree2类;  
   
  真诚希望得到大家的帮助!先谢谢了!  
     
         
  问题点数:100、回复次数:10Top

1 楼tianlinyi(笨蛋)回复于 2002-05-14 15:31:56 得分 0

:)Top

2 楼KissYou(宇宙顾问)回复于 2002-05-14 15:36:25 得分 10

试试发送消息!  
  你所说的方法应该行的,可能原因在于tree2的显示没得到更新!所以你不妨在tree2中专门写一个函数,它调用MakeTree函数后立即调用更新显示的函数(类似于控件中的UpdateData)!试试吧!Top

3 楼fhbkyo(光荣潜水员)回复于 2002-05-14 16:02:52 得分 2

把两个类定义成友元不就行了?Top

4 楼aileen_long(期待2002)回复于 2002-05-14 16:11:25 得分 13

最简单的方法:用全局变量。  
  1.在tree2的cpp里定义全局变量g_pTree2View;  
  2.在tree2的构造函数里,g_pTree2View   =   this;  
  3.在tree1的cpp里,extern   CTree2View   g_pTree2View;  
  4.在调用函数的地方用它就可以了Top

5 楼ndy_w(carpe diem)回复于 2002-05-14 16:16:10 得分 10

我希望在tree1类中双击节点后能够调用tree2中的maketree()函数  
  u   must   have   a   instance   of   tree2   at   this   time,   right?   and   u   must   know   where   is   it.   send   user-defined   msg   to   it,   with   lparam   or   wparam   pointing   to   the   address   containing   the   parameters   u   want   to   pass.   and   ofcourse,   u   must   handle   this   msg   in   tree2.Top

6 楼windchase(柠檬)回复于 2002-05-14 18:07:45 得分 0

ndy_w(王麻子):  
  能给个例子吗?  
   
  fhbkyo(琴月阳)   :  
  我那两个类都是继承CTreeView的,而不是单独定义的一个从C++类,定义为友元就可以调用函数吗?举个例子。Top

7 楼gigi_csdn(冰冰)回复于 2002-05-14 18:58:11 得分 50

有两种方法  
  1。你可以使用全局变量。  
  例如;  
  你建立的应用程序名字是:Tree,在FileView中,你会发现这个文件Tree.cpp;  
  在这个地方定义变量:  
  #ifdef   _DEBUG  
  #define   new   DEBUG_NEW  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]   =   __FILE__;  
  #endif  
  void   maketree();     //在这里定义  
   
  /////////////////////////////////////////////////////////////////////////////  
   
  引用时,在函数前声明  
  extern   void   maketree();    
  就可以了。  
   
  2。使用指针,在tree1调用tree2的函数。  
  在tree1.cpp中加上  
  #include   "tree2.h"  
  之后,这样调用  
      Ctree2   *p=(Ctree   2)GetParent();  
      p->maketree();  
  Top

8 楼gigi_csdn(冰冰)回复于 2002-05-14 19:00:34 得分 0

有一点小错误,是这样:  
  Ctree2   *p=(Ctree2   *)GetParent();  
   
  Top

9 楼gigi_csdn(冰冰)回复于 2002-05-14 19:21:51 得分 0

在2.中你还可以使用这个函数,来返回指向Ctree2的对象的指针。  
  GetWindow(   UINT   nCmd   )    
  就是这样  
  GetWindow(nCmd).maketree();  
  其中,nCmd表明Ctree1对象与Ctree2对象之间的关系可以使这些值:  
  GW_CHILD       返回CTree1第一个子窗口。      
   
   
  GW_HWNDFIRST       如果Ctree1是一个子窗口,返回第一个同级窗口,否则,返回     列表中的第一个窗口  
   
  GW_HWNDLAST       如果Ctree1是一个子窗口,   返回最后一个同级窗口.否则,返回     列表中的最后一个窗口。  
   
   
   
  GW_HWNDNEXT       返回窗口管理列表中下一个窗口。  
   
   
  GW_HWNDPREV       返回窗口管理列表中前一个窗口。  
   
   
  GW_OWNER       返回Ctree1窗口本身。Top

10 楼hnyyy(前进)回复于 2002-05-14 19:31:20 得分 15

 
   
  CMainFrame*   frame=(CMainFrame*)AfxGetMainWnd();  
  (frame->m_wndSplitter).SetActivePane(0,1);  
  CTree2*   tree2=CTree2*(frame->GetActiveView());  
  tree2->maketree();  
  Top

责任编辑: efish 参与评论 查找更多:
相关文章
求教关于域名设置的问题 求教关于域名设置的问题
请问这个问题那里有错? 请问这个问题那里有错?
java.net.MalformedURLException: no protocol: lin… java.net.MalformedURLException: no protocol: links.xml
有关多线程检查数据库中的图片连接 有关多线程检查数据库中的图片连接
哪位看过《GP与STL》的请发表一下意见 哪位看过《GP与STL》的请发表一下意见
求教列为兄弟姐妹Oracle的Rule相关技术,俺望眼欲穿… 求教列为兄弟姐妹Oracle的Rule相关技术,俺望眼欲穿,急迫
pb中引入Flash pb中引入Flash
大家使用什么编译器? 大家使用什么编译器?
如何用ADO连接SQL SERVER? 如何用ADO连接SQL SERVER?
怎么用mciSendString("set cdaudio door Close… 怎么用mciSendString("set cdaudio door Close wait",NULL,0,Handle)不能关上光驱
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎