【发布时间】:2017-04-18 19:58:09
【问题描述】:
我想重写 CTestDialog 的默认构造函数,以便可以在其中传递 CString。
如何通过
CTestDialog(CString strValue = NULL);
这在 MFC 中是可能的还是只是我的想象?
class CTestDialog : public CDialog
{
DECLARE_DYNAMIC(CTestDialog)
public:
CTestDialog(CWnd* pParent = NULL); // standard constructor
CTestDialog(CString strValue = NULL); // Custom Constructor
virtual ~CTestDialog();
// Dialog Data
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_TESTDIALOG };
#endif
protected:
CString _filename;
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
};
用法:
CString str = _T("Some Text");
CTestDialog dlg(str);
dlg.doModal();
更新 1
在线:
dlg.DoModal();
调试断言失败。显示 Microsoft Visual C++ 运行时库对话框。
更新 2
IMPLEMENT_DYNAMIC(CTestDialog, CDialog)
CTestDialog::CTestDialog(CWnd* pParent /*=NULL*/)
: CDialog(IDD_TESTDIALOG, pParent)
{
}
CTestDialog::CTestDialog(CString str)
: CDialog(CTestDialog::IDD, NULL)
{
_filename = str;
}
CTestDialog::~CTestDialog()
{
}
void CTestDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CTestDialog, CDialog)
END_MESSAGE_MAP()
BOOL CTestDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
AfxMessageBox(_filename.GetBuffer());
return TRUE;
}
【问题讨论】:
-
是的,这是可能的。你做这件事有什么困难吗?
-
是的,每当我编写上述代码时,都会显示调试断言对话框。我找不到正确的方法。任何样本都会很有帮助
-
@TheUndeadFish in dlg.doModal() -> 出现调试断言。不知道怎么解决。
-
@crashmstr 我已经按照我的方式分享了代码。但我不知道我是对还是错。我正在指定新的构造函数,而不是编辑默认构造函数。