お知恵を頂けると大変嬉しいです。
CDialogクラスを継承したダイアログA(IDD_DLGA)を作成しました。
他のクラス(CTest)からDomoelでIDD_DLGAを表示することはできました。
もうひとつ、ダイアログB(IDD_DLGB)を作りました。
ダイアログAの拡張版のような形で使用したく、ダイアログAクラスの変数やコントロールもすべて使用するので、
ダイアログAクラスの派生クラスとしたいです。
CTestからダイアログを表示する際、ダイアログAを表示するかダイアログBを表示するか条件文の結果により変えたいです。
色々、ネット上で調べて以下のようにしたのですが、コンストラクタのところでうまくいきません。
------------------------------------
◆Dlg_A.h
class CDlg_A : public CDialog
{
DECLARE_DYNCREATE(CDlg_A)
public:
CDlg_A(UINT IDD=0,CWnd* pParent = NULL);
virtual ~CDlg_A();
enum { IDD = IDD_DIALOG1 };
}
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
DECLARE_DHTML_EVENT_MAP()
CDlg_A::CDlg_A(UINT IDD,CWnd* pParent /*=NULL*/)
: CDialog(IDD, pParent)
{
}
CDlg_A::~CDlg_A()
{
}
class CDlg_B : public CDlg_A
{
DECLARE_DYNAMIC(CDlg_B)
public:
CDlg_B(CWnd* pParent = NULL); // 標準コンストラクタ
virtual ~CDlg_B();
// ダイアログ データ
enum { IDD = IDD_DIALOG2 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート
DECLARE_MESSAGE_MAP()
};
CDlg_B::CDlg_B(CWnd* pParent /*=NULL*/)
: CDlg_A(CDlg_B::IDD, pParent)
{
}
CDlg_B::~CDlg_B()
{
}
これだと、ダイアログAが表示されず落ちてしまいます。(リソースが指定されていないので)
ダイアログBは表示されるのですが・・。
CDlg_Aクラスで以下のようにダイアログAのリソースIDを指定するとダイアログAは表示されますが
ダイアログBが表示されたいときもダイアログAが表示されていまいます。 CDlg_BはCDlg_Aの派生クラスなので、必ず基底クラスのCDlg_Aのコンストラクタが呼ばれてリソースIDがCDlg_Aに
上書きされてしまうということでしょうか。
そもそも私がやりたいことはクラスの継承では出来ないことでしょうか。
そのこと自体、自信がありませんので、何か少しでもご意見頂けるとうれしいです。
よろしくお願いいたします。