【问题标题】:Setting Cedit Text设置 Cedit 文本
【发布时间】:2014-03-24 21:40:10
【问题描述】:

我有以下代码尝试在 Cedit 文本框中设置文本:

class CMetaDlg : public CDialogEx
{
public:
CMetaDlg();

// Dialog Data
enum { IDD = IDD_META };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
DECLARE_MESSAGE_MAP()
public:
CEdit m_author;
CEdit m_sources;
afx_msg void OnBnClickedOk();
};

CMetaDlg::CMetaDlg() : CDialogEx(CMetaDlg::IDD)
{
}

void CMetaDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_AUTHOR, m_author);
DDX_Control(pDX, IDC_SOURCES, m_sources);
}

BEGIN_MESSAGE_MAP(CMetaDlg, CDialogEx)
ON_BN_CLICKED(IDOK, &CMetaDlg::OnBnClickedOk)
END_MESSAGE_MAP()

void CEmergenceApp::OnFileMeta()
{


CMetaDlg md;    
md.DoModal();
md.m_author.SetWindowTextW(CEmergenceView::GetDoc()->author);
md.m_sources.SetWindowTextW(CEmergenceView::GetDoc()->sources);
}

这给了我一个调试断言错误。我假设问题出在以下几行:

md.m_author.SetWindowTextW(CEmergenceView::GetDoc()->author);
md.m_sources.SetWindowTextW(CEmergenceView::GetDoc()->sources);

将它们注释掉后,一切正常。

【问题讨论】:

  • 我想你想在 CMetaDlg 类的 OnInitDailog() 中设置这些值。
  • 不。试过你的建议。不起作用。
  • 那么,我建议GetDoc()返回的指针是无效的。你检查过吗?
  • 是的。我为 CEmergenceView::GetDoc()->author 替换了一个虚拟 CString。仍然给我一个调试断言错误....
  • 您正在使用 SetWindowTextW。你的应用程序是为 Unicode 编译的吗?

标签: visual-c++ cedit mdc


【解决方案1】:

当你调用 DoModal 时,对话框被创建,编辑控件被创建,然后当用户点击 OK 或 Cancel 时,编辑控件和对话框窗口被销毁。然后 DoModal 返回。我不明白您在对话框关闭后尝试设置编辑控件的文本是做什么的。

【讨论】:

  • OnInitDialog 是它唯一可以工作的地方。编辑控件在 DoModal 之前不存在,在 DoModal 之后也不存在。您必须做的是在 DoModal 之前设置对话框 CString 成员变量。然后在 OnInitDialog 中设置来自 CString 成员变量的控件。您在非常基本的 MFC 操作方面遇到了很多麻烦,因为您显然没有使用书籍或教程来了解事情是如何工作的。一点点学习会有很长的路要走。
猜你喜欢
  • 1970-01-01
  • 2011-09-06
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多