请教关于两个不同类之间的成员访问问题?

时间:2021-03-28 20:13:53
在一个对话框Cdlg1类中声明一个类的对象(CListCtrl m_listctrl),并在Cdlg1类中的成员函数Cdlg1::function1() 中用这个对象来访问成员函数(m_listctrl.SetItemText(0,i,"");)

有什么办法,在另外一个类Cdlg2访问来 Cdlg1的同一成员函数(m_listctrl.SetItemText(0,i,"");)注意一定要是cdlg1中的同一个?

15 个解决方案

#1


两个对话框之间存在什么关系?如果CDlg2是CDlg1的子窗口,可以用
((CDlg1*)GetParent())->m_listctrl.SetItemText(0,i,"");

#2


将 CListCtrl m_listctrl 设为公有变量;
把 Cdlg1 实例的指针传给 Cdlg2 实例成员变量,用该指针调用。如:
Cdlg2 dlg2;
dlg2.m_pdlg1 = &dlg1;
...
在 Cdlg2 成员函数中
m_pdlg1 -> m_listctrl.SetItemText(0,i,"");

#3


1、试试用对话框(Cdlg2)包含被调对话框(Cdlg1)函数定义头文件

#4


回1楼: 没任何关系, 
回2楼: 我也这样用过,问题是我要等到cdlg2初始话完成了以后才能调用这个函数, 所以还是传递参数, 还是不好用;
大家有没有更好的办法, 

#5


或许可以试试能不能在Cdlg1里声明个友员函数来完成(m_listctrl.SetItemText(0,i,"");)
这样在Cdlg2可能可以访问的到,

#6


?有两个方法
要么把 Cdlg1 dlg1;放在全局声明(知道怎样声明吧? )~ 之后那里调用,都是dlg1那么他的 m_listctrl就都是唯一了

2要么在Cdlg1类中~把 CListCtrl m_listctrl 定义为static类型~ 那么任何到时候你用到的Cdlg1的对象都会调用到唯一的m_listctrl

#7


2个方法:
1. 传dlg1的指针给Cdlg2
2. 友元

#8


没太懂LZ的意思,如何是在初始化之后调用。
可以试着把CListCtrl m_listctrl 设置成static,然后使用友元,在dlg2中调用dlg1
由于为静态,所以一定是和dlg1中为同一个。

#9


没有任何关系,那就把要访问的类指针定义为全局变量。

#10


对话框(Cdlg2)包含被调对话框(Cdlg1)函数定义头文件 

#11


楼上的解法都很好

#12


传指针

也可以把listctrl的句柄传递给CDlg2,然后再CDlg2里用SendMessage来操作listctrl

#13


这么久了,问题应该解决了吧~上面已经提出好多方法了`

#14


创建一个新的管理类DlgController。这个类有一个静态成员指针,是它本身类型的m_pdlgCotroller,并且它有两个主要成员分别是:CDlg1 *m_pDlg1; CDlg2 *m_pDlg2; 这两个指针分别指向运行时的对话框对象。在CDlg2的函数中使用:DlgController::m_pdlgCotroller->m_pDlg1->Function(); 就可以了

#15


用extern

#1


两个对话框之间存在什么关系?如果CDlg2是CDlg1的子窗口,可以用
((CDlg1*)GetParent())->m_listctrl.SetItemText(0,i,"");

#2


将 CListCtrl m_listctrl 设为公有变量;
把 Cdlg1 实例的指针传给 Cdlg2 实例成员变量,用该指针调用。如:
Cdlg2 dlg2;
dlg2.m_pdlg1 = &dlg1;
...
在 Cdlg2 成员函数中
m_pdlg1 -> m_listctrl.SetItemText(0,i,"");

#3


1、试试用对话框(Cdlg2)包含被调对话框(Cdlg1)函数定义头文件

#4


回1楼: 没任何关系, 
回2楼: 我也这样用过,问题是我要等到cdlg2初始话完成了以后才能调用这个函数, 所以还是传递参数, 还是不好用;
大家有没有更好的办法, 

#5


或许可以试试能不能在Cdlg1里声明个友员函数来完成(m_listctrl.SetItemText(0,i,"");)
这样在Cdlg2可能可以访问的到,

#6


?有两个方法
要么把 Cdlg1 dlg1;放在全局声明(知道怎样声明吧? )~ 之后那里调用,都是dlg1那么他的 m_listctrl就都是唯一了

2要么在Cdlg1类中~把 CListCtrl m_listctrl 定义为static类型~ 那么任何到时候你用到的Cdlg1的对象都会调用到唯一的m_listctrl

#7


2个方法:
1. 传dlg1的指针给Cdlg2
2. 友元

#8


没太懂LZ的意思,如何是在初始化之后调用。
可以试着把CListCtrl m_listctrl 设置成static,然后使用友元,在dlg2中调用dlg1
由于为静态,所以一定是和dlg1中为同一个。

#9


没有任何关系,那就把要访问的类指针定义为全局变量。

#10


对话框(Cdlg2)包含被调对话框(Cdlg1)函数定义头文件 

#11


楼上的解法都很好

#12


传指针

也可以把listctrl的句柄传递给CDlg2,然后再CDlg2里用SendMessage来操作listctrl

#13


这么久了,问题应该解决了吧~上面已经提出好多方法了`

#14


创建一个新的管理类DlgController。这个类有一个静态成员指针,是它本身类型的m_pdlgCotroller,并且它有两个主要成员分别是:CDlg1 *m_pDlg1; CDlg2 *m_pDlg2; 这两个指针分别指向运行时的对话框对象。在CDlg2的函数中使用:DlgController::m_pdlgCotroller->m_pDlg1->Function(); 就可以了

#15


用extern