典型问题:怎么实现两个类之间的变量或函数调用?高分--
典型问题:怎么实现两个类之间的变量或函数调用?高分--
楼主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
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
