vs2005 c++编辑CRichEditCtrl实例的内容
VS 2005 C++ edit content of the CRichEditCtrl instance
我在一个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();
}
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- 建议在运行时将带有类实例的列表从c++导入qml
- 约束和显式模板实例化
- 通过实例理解std::move及其目的
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 正在生成未知类实例
- 从DLL中删除类的实例
- 在std::vector上存储带有模板的类实例
- vs2005 c++编辑CRichEditCtrl实例的内容