edit控件显示、编辑文本文件

这家伙也很懒 2018-01-29 09:18:23
我想用edit控件做一个简单的类似文本编辑器,需要可以读入文本,并且可以对读入的内容进行编辑,保存按钮已经写好。但是读入的文本不能编辑,这个是为什么?代码如下:

BOOL isOpen = TRUE; //是否打开(否则为保存)
CString defaultDir = L"C:\\Users\nhk\Desktop"; //默认打开的文件路径
CString fileName = L""; //默认打开的文件名
CString filter = L"文件 (*.txt)|*.txt||"; //文件过滤的类型
CFileDialog openFileDlg(isOpen, defaultDir, fileName, OFN_HIDEREADONLY | OFN_READONLY, filter, NULL);
openFileDlg.GetOFN().lpstrInitialDir = L"C:\\Users\nhk\Desktop\*.txt";
INT_PTR result = openFileDlg.DoModal();
CString filePath = defaultDir + "\1.txt";

CStdioFile stdfile;
CString strLine;
CString strText;

if (result == IDOK) {
filePath = openFileDlg.GetPathName();
stdfile.Open(filePath, CFile::modeReadWrite);
while (stdfile.ReadString(strLine))
{
strText+=strLine;
strText += "\r\n";
}
stdfile.Close();
m_edit.SetWindowText(strText);
}


目前可以把文本正常读进来,但是不能正常编辑。我是新手,希望大家可以讲的清楚一些,谢谢。
...全文
685 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mlqxj35674 2018-01-30
  • 打赏
  • 举报
回复
m_brBrush 在类构造器中生成,在case CTLCOLOR_EDIT中直接返回,不用每次 DeleteObject()后再CreateSolidBrush(RGB(45, 45, 48)); 要返回的画刷对象必须是成员变量且不是临时变量,如果不同的子控件设置不同背景,应该多建立几个画刷对象,按不同控件对象返回不同的画刷对象
这家伙也很懒 2018-01-30
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster 的回复:
没有经过 CTLCOLOR_EDIT: ? Invalidate 一下
没有看明白,什么意思?可以说具体一些吗?谢谢!
这家伙也很懒 2018-01-30
  • 打赏
  • 举报
回复
找到问题了,问题出在pDC->SetBkMode(TRANSPARENT); 这一句,我现在直接用pDC->SetBkColor(RGB(40,40,40));这个就没有那个问题了,谢谢各位的解答
这家伙也很懒 2018-01-30
  • 打赏
  • 举报
回复
引用 11 楼 shiyanbo_1006 的回复:
不是透明背景吧
OnEraseBkgnd添加这个消息看看


设置的黑色背景,是指下面这个消息吗?


具体要写什么代码吗?
这家伙也很懒 2018-01-30
  • 打赏
  • 举报
回复
引用 10 楼 mlqxj35674 的回复:
m_brBrush 在类构造器中生成,在case CTLCOLOR_EDIT中直接返回,不用每次 DeleteObject()后再CreateSolidBrush(RGB(45, 45, 48)); 要返回的画刷对象必须是成员变量且不是临时变量,如果不同的子控件设置不同背景,应该多建立几个画刷对象,按不同控件对象返回不同的画刷对象
试了这个方法,对我这个问题没有效果,但是感觉这样写确实美观整齐简洁,谢谢了
待续_1006 2018-01-30
  • 打赏
  • 举报
回复
不是透明背景吧 OnEraseBkgnd添加这个消息看看
worldy 2018-01-29
  • 打赏
  • 举报
回复
怎么可能,Edit控制默认是可以编辑的,你是否设置了Enable 属性或者Lock属性?
这家伙也很懒 2018-01-29
  • 打赏
  • 举报
回复
补充一下,我是想在edit控件的编辑框里面对读入的文本编辑,然后再把编辑之后的内容保存
schlafenhamster 2018-01-29
  • 打赏
  • 举报
回复
没有经过 CTLCOLOR_EDIT: ? Invalidate 一下
这家伙也很懒 2018-01-29
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
"显示都会出现问题" 什么问题 ?
就是我在5楼贴的图片那样
schlafenhamster 2018-01-29
  • 打赏
  • 举报
回复
"显示都会出现问题" 什么问题 ?
这家伙也很懒 2018-01-29
  • 打赏
  • 举报
回复

在一行中间部分敲字或是删除就会变成这样;但是把这个地方选择一下,就会正常显示。感觉像是显示刷新的问题,不知道该怎么改
这家伙也很懒 2018-01-29
  • 打赏
  • 举报
回复
但是还有一个问题就是我添加颜色消息设置了edit控件的背景色,文本颜色等,结果在编辑框敲字和删除,显示都会出现问题。这是为什么? case CTLCOLOR_EDIT: //对所有编辑框的设置 { pDC->SetBkMode(TRANSPARENT);//设置字体背景透明 pDC->SetTextColor(RGB(255, 255, 255)); /*pDC->SetBkColor(RGB(45,45,48));*/ //pWnd->SetFont(cFont); if (m_brBrush.GetSafeHandle()) { m_brBrush.DeleteObject(); } m_brBrush.CreateSolidBrush(RGB(45, 45, 48)); //创建画刷 return m_brBrush; //返回画刷句柄 }
这家伙也很懒 2018-01-29
  • 打赏
  • 举报
回复
已经解决了,是因为edit需要设置文本大小限制,我读的文本有点大。 m_edit.SetLimitText(1024*1024*1024);

16,472

社区成员

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

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

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