
c++ MFC文字处理程序问题
描述:我用MFC按照向导生成了一个单文档文字处理程序,实际上跟一个记事本程序差不多:可以在用户区编辑文本,以及文档保存、新建等工作。实际上就是在向导设置的时候,在最后一步...
描述:我用MFC按照向导生成了一个单文档文字处理程序,实际上跟一个记事本程序差不多:
可以在用户区编辑文本,以及文档保存、新建等工作。
实际上就是在向导设置的时候,在最后一步将视类的基类设为CEditView
我做这个程序的目的是想实现一个对文档的简单加密:我在编辑区输入一些字符,然后保存为一个TXT文件,但是我想在“保存”这个动作执行的时候对我输入的字符内容作一定的运算,使之成为乱码,然后把这些乱码保存到一个文档(假设名为1.txt);而当我用这个程序再次打开1.txt的时候,再通过运算将字符还原成可读的文字,并显示到视窗内。
假如我这个工程名叫test,按向导设置完后,可以看到程序代码有以下几个类:CMainFrame,CTestAPP,CTestDoc,CTestView,其他略。
在CTestDoc下有一个成员函数叫Serialize(CArchive& ar),即:
void CTestDoc::Serialize(CArchive& ar)
{
// CEditView contains an edit control which handles all serialization
((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);
if (ar.IsStoring())
{//文件将要保存
}
else
{//文件将被加载
}
}
此处的if和else语句是我加的。
我觉得应该在这if和else里面对字符进行运算,但是有两个问题:
第一,我不知道怎么才能获取到用户输入的字符内容(特别说明,是输入的内容,而不是要得到这个文档对象),主要原因是所有代码都是MFC辅助生成的,我不知道用户输入的字符被保存到哪个类下的哪个成员变量里去了,只是可以肯定这个量应该是个指向CString类变量的一个指针,只有获取到了这个指针,才能捕获用户的输入并进行运算。
第二,由于上面的if和else语句是我后来加的,也就是说原来代码里是不做这个判断的,但是同样可以对文件进行保存和读取,所以我怀疑我是不是找错地方了,可能根本不在这个函数下作修改
请高手赐教,灌水绕道。。。
先给80分,回答满意的话追加100分,绝不食言
希望回答者先用MFC生成一下,单文档的,关键按向导一步步往下设,到最后一步视类的基类设为CEditView,其他设置都不重要 展开
可以在用户区编辑文本,以及文档保存、新建等工作。
实际上就是在向导设置的时候,在最后一步将视类的基类设为CEditView
我做这个程序的目的是想实现一个对文档的简单加密:我在编辑区输入一些字符,然后保存为一个TXT文件,但是我想在“保存”这个动作执行的时候对我输入的字符内容作一定的运算,使之成为乱码,然后把这些乱码保存到一个文档(假设名为1.txt);而当我用这个程序再次打开1.txt的时候,再通过运算将字符还原成可读的文字,并显示到视窗内。
假如我这个工程名叫test,按向导设置完后,可以看到程序代码有以下几个类:CMainFrame,CTestAPP,CTestDoc,CTestView,其他略。
在CTestDoc下有一个成员函数叫Serialize(CArchive& ar),即:
void CTestDoc::Serialize(CArchive& ar)
{
// CEditView contains an edit control which handles all serialization
((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);
if (ar.IsStoring())
{//文件将要保存
}
else
{//文件将被加载
}
}
此处的if和else语句是我加的。
我觉得应该在这if和else里面对字符进行运算,但是有两个问题:
第一,我不知道怎么才能获取到用户输入的字符内容(特别说明,是输入的内容,而不是要得到这个文档对象),主要原因是所有代码都是MFC辅助生成的,我不知道用户输入的字符被保存到哪个类下的哪个成员变量里去了,只是可以肯定这个量应该是个指向CString类变量的一个指针,只有获取到了这个指针,才能捕获用户的输入并进行运算。
第二,由于上面的if和else语句是我后来加的,也就是说原来代码里是不做这个判断的,但是同样可以对文件进行保存和读取,所以我怀疑我是不是找错地方了,可能根本不在这个函数下作修改
请高手赐教,灌水绕道。。。
先给80分,回答满意的话追加100分,绝不食言
希望回答者先用MFC生成一下,单文档的,关键按向导一步步往下设,到最后一步视类的基类设为CEditView,其他设置都不重要 展开
4个回答
展开全部
ctrl+w 打开类向导 找到CEditorView的WM_CHAR消息,双击添加一个OnChar
在OnChar函数中加入如下代码
static CString lines(""); //lines可以定义在CEditorView的头文件中,成为全局的
lines+=(char)nChar; //lines就是你要的
if(nChar=='\r') MessageBox(lines,"我是用来测试的");
在OnChar函数中加入如下代码
static CString lines(""); //lines可以定义在CEditorView的头文件中,成为全局的
lines+=(char)nChar; //lines就是你要的
if(nChar=='\r') MessageBox(lines,"我是用来测试的");
展开全部
第一:获得View对象指针pView。
CString str;
pView->GetWindowText(str);
第二:
((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);这行语句执行默认的序列化操作,要想用自己的替换,把这行删掉,然后再执行你的代码。
另:获得视图对象指针的方法可参考我空间里的文章。
http://hi.baidu.com/%BA%CE%B4%A6%B4%E3%CE%E2%B9%B3/blog/item/bb5c950b1cbdbd1994ca6b07.html
CString str;
pView->GetWindowText(str);
第二:
((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);这行语句执行默认的序列化操作,要想用自己的替换,把这行删掉,然后再执行你的代码。
另:获得视图对象指针的方法可参考我空间里的文章。
http://hi.baidu.com/%BA%CE%B4%A6%B4%E3%CE%E2%B9%B3/blog/item/bb5c950b1cbdbd1994ca6b07.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说的太笼统,麻烦。
你的需求是什么
在单文档上实现windows自带的那种记事本,是吗?
有保存,另存为功能? 是么
如果是很简单
如果是加我
254560671
你的需求是什么
在单文档上实现windows自带的那种记事本,是吗?
有保存,另存为功能? 是么
如果是很简单
如果是加我
254560671
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我以前做过一个这样的小程序,要不我发给你!看了你就明白了。qq:790289559
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询