vs2005 c++编辑CRichEditCtrl实例的内容

VS 2005 C++ edit content of the CRichEditCtrl instance

本文关键字:实例 CRichEditCtrl c++ 编辑 vs2005      更新时间:2023-10-16

我在一个VMWare镜像上安装了Windows XP Professional SP3,并在上面安装了Visual Studio 2005。我创建了一个新的基于/clr支持的c++ MFC项目对话框。我已经把一个RichEdit 2.0控件放到自动生成的对话框中,我正试图读取一个文本文件,并通过单击按钮将其内容放入这个RichEdit 2.0控件中,而不需要格式化。我已经添加了一个变量到RichEdit 2.0称为pCRichEditCtrl,这里是我的代码不工作。

CWinApp继承:

BOOL CTextFormatterApp::InitInstance()
{
    ...
    AfxInitRichEdit2();
    CWinApp::InitInstance();
    ...
}

CDialog继承:

void CTextFormatterDlg::OnBnClickedButton1()
{   
    StreamReader^ objReader = gcnew StreamReader("c:\text.txt");
    String ^sLine = "";
    sLine = objReader->ReadLine();
    while (sLine != nullptr)
    {
            pCRichEditCtrl.SetSel(pCRichEditCtrl.GetTextLength(), -1);
            pCRichEditCtrl.ReplaceSel(CString(sLine));
            sLine = objReader->ReadLine();
    }
    objReader->Close();
}

我不知道它是否计数,但我在链接时得到以下警告:

TextFormatterDlg。obj:警告LNK4248:未解析的类型令牌(01000016)为"AFX_CMDHANDLERINFO";图像不能运行

定义。obj:警告LNK4248:未解析的类型标记(01000012)为"AFX_CMDHANDLERINFO";图像不能运行

TextFormatterDlg。obj:警告LNK4248:未解析的类型令牌(01000015)为IAccessibleProxy;图像不能运行

我不确定我在做什么,因为我只熟悉较新的框架,我不知道Windows。

输入文件存在,如果我调试应用程序,我可以看到读取文本,但我看不到编辑框中的任何更改。我已经尝试调用pCRichEditCtrl.UpdateData(true);但没有任何改变。

是否足以添加一个变量来获取盒子的控制器(pCRichEditCtrl)?这个指针似乎没有指向正确的控制项。

你知道少了什么吗?

不需要使用CLI来读取文本文件,请尝试如下操作:

void CTextFormatterDlg::OnBnClickedButton1()
{   CStdioFile f1;
    CString sLine;
    if (!f1.Open(_T("c:\text.txt"), CFile::modeRead | CFile::typeText))
        return;
    while (f1.ReadString(sLine))
    {   pCRichEditCtrl.SetSel(pCRichEditCtrl.GetTextLength(), -1);
        pCRichEditCtrl.ReplaceSel(sLine);
    }
    f1.Close();
}



EDIT:控制变量pCRichEditCtrl

a)应该在对话框类中声明为CRichEditCtrl pCRichEditCtrl;

b)应连接到控件的ID(例如:IDC_RICHEDIT21),如

void CTextFormatterDlg::DoDataExchange(CDataExchange* pDX)
{   CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_RICHEDIT21, pCRichEditCtrl);
}

c)我已经测试了以下代码,它为我工作(在每个按钮单击上添加"aa"到控制窗口)

pCRichEditCtrl.SetSel(pCRichEditCtrl.GetTextLength(), -1);
pCRichEditCtrl.ReplaceSel(TEXT("aa"));

我与社区分享了最终的解决方案,以供面临相同问题的人使用。我不知道为什么我必须在CWinApp继承上使用Update(FALSE);两次,但它解决了所有问题。如果有人有一个想法或一个更好的(更好的)解决方案,请不要犹豫与我们分享,我会将接受的标志移到那个版本(如果可能的话,我以前没有尝试过)。

void CTextFormatterDlg::OnBnClickedButton1()
{
    StreamReader^ objReader = gcnew StreamReader("c:\text.txt");
    String ^sLine = objReader->ReadLine();
    UpdateData(FALSE); //this is the first unexpected first aid
    while (sLine != nullptr)
    {
        pCRichEditCtrl.SetSel(pCRichEditCtrl.GetTextLength(), -1);
        pCRichEditCtrl.ReplaceSel(CString(sLine + "rn"));
        UpdateData(FALSE); //this is the second unexpected first aid
        sLine = objReader->ReadLine();
    }
    objReader->Close();
}