有什么办法,在另外一个类Cdlg2访问来 Cdlg1的同一成员函数(m_listctrl.SetItemText(0,i,"");)注意一定要是cdlg1中的同一个?
15 个解决方案
#1
两个对话框之间存在什么关系?如果CDlg2是CDlg1的子窗口,可以用
((CDlg1*)GetParent())->m_listctrl.SetItemText(0,i,"");
((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,"");
把 Cdlg1 实例的指针传给 Cdlg2 实例成员变量,用该指针调用。如:
Cdlg2 dlg2;
dlg2.m_pdlg1 = &dlg1;
...
在 Cdlg2 成员函数中
m_pdlg1 -> m_listctrl.SetItemText(0,i,"");
#3
1、试试用对话框(Cdlg2)包含被调对话框(Cdlg1)函数定义头文件
#4
回1楼: 没任何关系,
回2楼: 我也这样用过,问题是我要等到cdlg2初始话完成了以后才能调用这个函数, 所以还是传递参数, 还是不好用;
大家有没有更好的办法,
回2楼: 我也这样用过,问题是我要等到cdlg2初始话完成了以后才能调用这个函数, 所以还是传递参数, 还是不好用;
大家有没有更好的办法,
#5
或许可以试试能不能在Cdlg1里声明个友员函数来完成(m_listctrl.SetItemText(0,i,"");)
这样在Cdlg2可能可以访问的到,
这样在Cdlg2可能可以访问的到,
#6
?有两个方法
要么把 Cdlg1 dlg1;放在全局声明(知道怎样声明吧? )~ 之后那里调用,都是dlg1那么他的 m_listctrl就都是唯一了
2要么在Cdlg1类中~把 CListCtrl m_listctrl 定义为static类型~ 那么任何到时候你用到的Cdlg1的对象都会调用到唯一的m_listctrl
要么把 Cdlg1 dlg1;放在全局声明(知道怎样声明吧? )~ 之后那里调用,都是dlg1那么他的 m_listctrl就都是唯一了
2要么在Cdlg1类中~把 CListCtrl m_listctrl 定义为static类型~ 那么任何到时候你用到的Cdlg1的对象都会调用到唯一的m_listctrl
#7
2个方法:
1. 传dlg1的指针给Cdlg2
2. 友元
1. 传dlg1的指针给Cdlg2
2. 友元
#8
没太懂LZ的意思,如何是在初始化之后调用。
可以试着把CListCtrl m_listctrl 设置成static,然后使用友元,在dlg2中调用dlg1
由于为静态,所以一定是和dlg1中为同一个。
可以试着把CListCtrl m_listctrl 设置成static,然后使用友元,在dlg2中调用dlg1
由于为静态,所以一定是和dlg1中为同一个。
#9
没有任何关系,那就把要访问的类指针定义为全局变量。
#10
对话框(Cdlg2)包含被调对话框(Cdlg1)函数定义头文件
#11
楼上的解法都很好
#12
传指针
也可以把listctrl的句柄传递给CDlg2,然后再CDlg2里用SendMessage来操作listctrl
也可以把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,"");
((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,"");
把 Cdlg1 实例的指针传给 Cdlg2 实例成员变量,用该指针调用。如:
Cdlg2 dlg2;
dlg2.m_pdlg1 = &dlg1;
...
在 Cdlg2 成员函数中
m_pdlg1 -> m_listctrl.SetItemText(0,i,"");
#3
1、试试用对话框(Cdlg2)包含被调对话框(Cdlg1)函数定义头文件
#4
回1楼: 没任何关系,
回2楼: 我也这样用过,问题是我要等到cdlg2初始话完成了以后才能调用这个函数, 所以还是传递参数, 还是不好用;
大家有没有更好的办法,
回2楼: 我也这样用过,问题是我要等到cdlg2初始话完成了以后才能调用这个函数, 所以还是传递参数, 还是不好用;
大家有没有更好的办法,
#5
或许可以试试能不能在Cdlg1里声明个友员函数来完成(m_listctrl.SetItemText(0,i,"");)
这样在Cdlg2可能可以访问的到,
这样在Cdlg2可能可以访问的到,
#6
?有两个方法
要么把 Cdlg1 dlg1;放在全局声明(知道怎样声明吧? )~ 之后那里调用,都是dlg1那么他的 m_listctrl就都是唯一了
2要么在Cdlg1类中~把 CListCtrl m_listctrl 定义为static类型~ 那么任何到时候你用到的Cdlg1的对象都会调用到唯一的m_listctrl
要么把 Cdlg1 dlg1;放在全局声明(知道怎样声明吧? )~ 之后那里调用,都是dlg1那么他的 m_listctrl就都是唯一了
2要么在Cdlg1类中~把 CListCtrl m_listctrl 定义为static类型~ 那么任何到时候你用到的Cdlg1的对象都会调用到唯一的m_listctrl
#7
2个方法:
1. 传dlg1的指针给Cdlg2
2. 友元
1. 传dlg1的指针给Cdlg2
2. 友元
#8
没太懂LZ的意思,如何是在初始化之后调用。
可以试着把CListCtrl m_listctrl 设置成static,然后使用友元,在dlg2中调用dlg1
由于为静态,所以一定是和dlg1中为同一个。
可以试着把CListCtrl m_listctrl 设置成static,然后使用友元,在dlg2中调用dlg1
由于为静态,所以一定是和dlg1中为同一个。
#9
没有任何关系,那就把要访问的类指针定义为全局变量。
#10
对话框(Cdlg2)包含被调对话框(Cdlg1)函数定义头文件
#11
楼上的解法都很好
#12
传指针
也可以把listctrl的句柄传递给CDlg2,然后再CDlg2里用SendMessage来操作listctrl
也可以把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