有个指针问题想请教一下,我在MFC对话框程序中添加了TabCtrl,然后创建了10个子对话框,分别显示在TabPage上,针对这10个对话框都创建了CDialog的派生类,且创建了它们的成员,属于上层的对话框类。假设MFC对话框程序类名为CDlg_main,10个子对话框类为CDlg_child1,CDlg_child2...在CDlg_main中添加针对子对话框的10个成员:m_Child1, m_Child2...现在我想用一个通用的指针,分别指向这10个子对话框,且能访问子对话框类中的成员,该如何定义指针呢?
我用了CDialog* p_Dlg_comm,在使用某个子对话框时,强制转换为相应的子对话框类,结果不成,用static_cast<>也不行,也不能访问子对话框类中的成员。请问如何定义通用指针,分别指向不同的子对话框类,且能访问其成员呢?
谢谢!
我用了CDialog* p_Dlg_comm,在使用某个子对话框时,强制转换为相应的子对话框类,结果不成,用static_cast<>也不行,也不能访问子对话框类中的成员。请问如何定义通用指针,分别指向不同的子对话框类,且能访问其成员呢?
谢谢!
p_child[0] = new CMyDialog(...);CMyDialog * dlg = dynamic<CMyDialog *>(p_child[0]);
dlg->DoSomeThing();
我在类CDlg_main中有10个成员:m_Child1,m_Child2...它们都分别指向10个对话框,另外我还在CDlg_main中添加了一个CDialog* p_Dlg_comm指针,我现在想在运行时把p_Dlg_comm转换为当前显示的子对话框类型,且指向这个当前显示的对话框,能访问该对话框中的成员。跟a_rockboy说的不太一样。
然后定义一个对话框指针数组 CDialog* m_pDlgs[10];
然后对其赋值 m_pDlgs[0] = m_Child1,m_pDlgs[1] = m_Child2.....
以后调用m_pDlgs[0]就指向第一个对话框,m_pDlgs[1]指向第二个对话框。
CDialog* p_Dlg_comm;m_Child1=(CDlg_child1 *)p_Dlg_comm;
肯定能转换成功。
写CBaseDlg 继承CDialog; 关键是在类里定义虚函数接口,如:virtual CWnd* GetThisDlgItem(int ID);并设置标记m_iDlgID,是哪个对话框;
然后自己的10个对话框CMyDlg继承CBaseDlg; 改写virtual,根据ID处理,
这样,设置当前对话框CBaseDlg *pDLg->GetThisDlgItem()就不用强制转换了。不知道是不是这个意思...
将共同的函数和类变量都放到基类中通过基类就可以访问你在子对话框了。用的时候直接通过子对话框变量去访问这些共用的函数和变量即可
class CSubBaseDlg : public CDialog
{
public:
virtual int func() = 0;
protected:
int m_int;
}class CDlg_child1 : public CSubBaseDlg
{
public:
virtual int func() = 0;
protected:
int m_int;
}
你现在的子对话框就是一个派生类来的,再抽象一个基类只是在你现在的对话框和CDialog这个类中间再插入一层而已
一点都不麻烦。其实你想要的通用指针是也只能是通过基类指针才能访问的
你可以定义成通用的CDialog*指针,这样你就可以随便访问CDialog相关的函数和变量你派生类中特殊的成员肯定需要你的派生类才能访问
除非你将他抽象出来到一个基类中再用基类来访问。不知这样说有没有说清楚了呢?