我已经在VMWare映像上安装了Windows XP Professional SP3,并在其上安装了Visual Studio 2005。我创建了一个新的基于对话框的C ++ MFC项目,带有/ clr支持。我已将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:“ AFX_CMDHANDLERINFO”的未解析的typeref令牌(01000016);图像可能无法运行
TextFormatter.obj:警告LNK4248:“ AFX_CMDHANDLERINFO”的未解析的typeref令牌(01000012);图片可能无法运行
TextFormatterDlg.obj:警告LNK4248:“ IAccessibleProxy”的未解析的typeref令牌(01000015);图片可能无法运行
我不确定自己在做什么,因为我只熟悉较新的框架,也不知道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();
}
编辑:控制变量
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"));
关于c++ - VS 2005 C++编辑CRichEditCtrl实例的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24094329/