vc中如何读取并显示文本文件

蛋花 2012-10-15 02:30:39
我想在vc++6.0中实现这样一个功能:
在多文档应用程序界面的主菜单中使用自带的打开功能,打开一个文本文件,将内容显示到子文档界面中。
这种司空见惯的功能类似于记事本,office,我们每天都在用,但是我在实现的时候遇到了一些问题。
我采用的方法:
在Doc类中定义一个CString fileStr成员变量存贮文件内容,在OnOpenDoucument()函数中读取文件的内容,并赋值给fileStr,然后在View类的OnDraw()中通过判断fileStr是否为空用TextOut()或者DrawText()来将文件内容显示出来。
但是我在实践中却发现TextOut()或者DrawText()都无法正常的显示文本,不知问题何在。
小生愚钝,在网上搜寻良久无果,遂来论坛请教大大们如何实现上述功能,其中office或者记事本等一些成熟的软件又是如何实现这些功能?
当然我需求的功能只是显示,不需要编辑,所以使用CEditView类继承的方法就不用了,这个毕竟只是MFC内部的实现,我想知道的是如何自己去实现。
恳求答复,感激不尽!
...全文
446 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
傻X 2012-10-16
  • 打赏
  • 举报
回复
TextOut和DrawText都要自己选择输出的DC的。

楼主是不是固定DC选择错误呢?
schlafenhamster 2012-10-16
  • 打赏
  • 举报
回复
不使用CEditView 要自己 OnDraw 麻烦

CEditView::GetEditCtrl().SetReadOnly();
放InitialUpdate 中试试。
ReadyOnly后背景颜色是灰的。
蛋花 2012-10-16
  • 打赏
  • 举报
回复
楼上的方法好像不行,我在CEditView中的PreCreateWindow()中设置
CEditView::GetEditCtrl().SetReadOnly();
但是会出现运行时错误,忽略错误后,打开文本仍然可以编辑。
蛋花 2012-10-16
  • 打赏
  • 举报
回复
感谢5楼的帮助,在CEditView中添加如下代码
void CXXXView::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
CEditView::GetEditCtrl().SetReadOnly();
}
即完成显示文本但不能编辑的功能。
谢谢大家,立即结贴!
小新小小新 2012-10-15
  • 打赏
  • 举报
回复
根据CEditView::GetEditCtrl来获取内置的cedit控件,然后对其进行readonly可以不??
蛋花 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

1.在OnOpenDoucument()函数中读取文件的内容,并赋值给fileStr
2.CEditView的UpdateView中:
SetWindowText(fileStr);
别的不要。
3.Doc 得到fileStr后 UpdateAllView();
[8/Quote]
感谢你的回复,我按照你的提示做了如下操作:
在Doc类中添加函数

BOOL CTestShowViewDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;

CFile file(lpszPathName, CFile::modeRead);
file.Read(fileStr.GetBuffer(file.GetLength()), (UINT)file.GetLength());
UpdateAllViews(NULL);
file.Close();

return TRUE;
}
在View中添加:

void CTestShowViewView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)
{
SetWindowText(GetDocument()->fileStr);
}

不知道是我理解有误还是操作有问题,但是仍然无法显示文本文件。
我留意到你的第二条步骤中提到了CEditView,我的原意是不使用CEditView继承来实现此功能,因为需求是对生成的报表只能查看,不能修改。但是使用CEditView会导致能够编辑文本,这是不允许的。
仍然感谢你的回复,期待更精彩的答案!
schlafenhamster 2012-10-15
  • 打赏
  • 举报
回复
1.在OnOpenDoucument()函数中读取文件的内容,并赋值给fileStr
2.CEditView的UpdateView中:
SetWindowText(fileStr);
别的不要。
3.Doc 得到fileStr后 UpdateAllView();

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧