如何在自定义类中调用“SetDlgItemText”?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在自定义类中调用“SetDlgItemText”?相关的知识,希望对你有一定的参考价值。

我创建了基于Dialog的MFC应用程序(c ++)。 OnBnClickedButton使用SetDlgItemText()打印编辑控件的数据。现在我想在自定义类(新创建的类)中使用SetDlgItemText,但收到错误“Debug assertion failed”。

class test: public CDialogEx
{
public:
    void upd(CString);
};

void test::upd(CString a)
{
    SetDlgItemText(IDC_EDIT6,a);
}

void CMFCApplication3Dlg::OnBnClickedButton4()
{
    test obj;
    obj.upd("Hello");
}

答案

您只能在创建对话框窗口时设置对话框项。

调用CreateDoModal时会创建对话框。只要您只有一个对话框类的实例,就不能在未创建对话框时访问其中的任何窗口。

通常,您应该使用DDX例程在对话框类和窗口之间交换数据。

PS:在我看来这是一个初学MFC问题。请阅读一些教程。

另一答案

尝试在事件处理程序中执行此操作

void CMFCApplication3Dlg::OnBnClickedButton4()
{
    CString str; //Initialize this string to whatever you wish to
    GetDlgItem(IDC_EDIT6)->SetWindowText(str);
}

希望这可以帮助。

p.s我知道这与SetDlgItemText无关,它只是在mfc中设置文本的另一种方式。

以上是关于如何在自定义类中调用“SetDlgItemText”?的主要内容,如果未能解决你的问题,请参考以下文章

在自定义类中使用setMouseCallBack

如何让 .xib 出现在自定义类中

如何在自定义视图类中使用 soundPool? [关闭]

如何在自定义对话框类中使用 getActivity.getLayoutInflater()

如何在自定义类中隐藏迭代器和容器实现(无增强)

如何在自定义视图类中链接 onSizeChanged()、onMeasure()、onDraw()