初次写记事本遇到退出问题

cismylife 2009-08-08 11:25:35
首先我使用对话框+RichEdit控件模拟的一个记事本程序,我想实现这个功能,就是点击退出的时候看一下编辑部分是否改变了,如果改变的话,那就弹出保存对话框。如果打开后什么都不做,那退出的时候必然是直接退出。目前我遇到的文件就是如何监视RichEdit控件输入文本部分的改变,我试过通过比较字符串的大小来判断,但是你添加一个再删除一个字符就会出现逻辑上的问题,所以我想到必须监视编辑部分的变化,一点发生了变化,就需要保存。但是如何监视变化呢,请各位高手帮忙分析一下,想了好几个小时,不知道怎么做,急。
...全文
195 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
gg606 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 gauss85 的回复:]
用CRichEditCtrl::GetModify可以看到是不是改变了吧~
[/Quote]

fishion 2009-08-09
  • 打赏
  • 举报
回复
楼主可去认真看下类记事本的程序,它们基本上都是你有给里面数据添加删除后,就立即标记为已修改状态,无论你之后把数据内容恢复一样,一样是修改标记
paerxiushi 2009-08-09
  • 打赏
  • 举报
回复
没必要这么复杂的,你只要在编辑框加载完文本,之后获取编辑框的文本,将其保存到变量里.
然后当用户关闭程序时,响应WM_CLOSE消息,再次获取编辑框文件,看前后这两个变量是否相同,若不同,则提示用户。
gauss85 2009-08-09
  • 打赏
  • 举报
回复
用CRichEditCtrl::GetModify可以看到是不是改变了吧~
cismylife 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 danxuezx 的回复:]
楼主的方法肯定不行。如果改了其中一个字符这样字符串的大小应该是没有变的。我觉得您倒是可以监视光标。如果没有光标(仅仅打开而不点击编辑区)或者光标一直没有改变位置则可以认为用户没有对此文件做任何修改,则不用提示用户保存,否则则提示用户保存。
[/Quote]
我觉得这个方法很好,但是我初学vc,不知道如何监视光标,只知道那个光标函数,是通过设置定时器监视还是怎么着?
cutrain2009 2009-08-09
  • 打赏
  • 举报
回复
文档类的SetModify()标记
cismylife 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cismylife 的回复:]
引用 8 楼 bragi523 的回复:
RichEdit没有一个onchange之类的事件吗?

的确有个enchange事件,我在事件里设置了变量然后通过这个变量来判断,但是不行,调试的时候在编辑框输入文字根本就不进入这个函数,可见这个函数没有执行。所以我不知道是否还应该在void CNotepad_beta1Dlg::OnChangeRichedit1() 函数中设置什么?
[/Quote]
我查了个资料,试着在OnInitDialog()中填入:
long lMask = m_myREdit.GetEventMask();
lMask |= ENM_CHANGE;
lMask &= ~ENM_PROTECTED;
m_myREdit.SetEventMask(lMask);
然后在进行onchange的操作,问题解决。
cismylife 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bragi523 的回复:]
RichEdit没有一个onchange之类的事件吗?
[/Quote]
的确有个enchange事件,我在事件里设置了变量然后通过这个变量来判断,但是不行,调试的时候在编辑框输入文字根本就不进入这个函数,可见这个函数没有执行。所以我不知道是否还应该在void CNotepad_beta1Dlg::OnChangeRichedit1() 函数中设置什么?
bragi523 2009-08-09
  • 打赏
  • 举报
回复
RichEdit没有一个onchange之类的事件吗?
danxuezx 2009-08-09
  • 打赏
  • 举报
回复
楼主的方法肯定不行。如果改了其中一个字符这样字符串的大小应该是没有变的。我觉得您倒是可以监视光标。如果没有光标(仅仅打开而不点击编辑区)或者光标一直没有改变位置则可以认为用户没有对此文件做任何修改,则不用提示用户保存,否则则提示用户保存。
「已注销」 2009-08-09
  • 打赏
  • 举报
回复
你OnKeyDown不就行了,要不你就OnTimer
flyoxs 2009-08-09
  • 打赏
  • 举报
回复
如果LZ用SDI做的话,这个问题就好解决了。文档类中已经有相应的框架,改变数据后标记一下就行了。
stjay 2009-08-08
  • 打赏
  • 举报
回复
监视RichEdit控件输入文本部分的改变:
添加 一个成员变量 来标记 文本是否发生变化
映射 RichEdit控件的 EN_CHANGE,(在编辑器双击RichEdit控件 就会生成对应的函数)
在函数里修改 这个成员变量

添加一个再删除这个字符,退出时不保存?
Windows的记事本都没这功能,其他多数的编辑器都没
估计实现起来很麻烦
ghost129 2009-08-08
  • 打赏
  • 举报
回复
可以试下CFile类,用个线程用以监视该文件,CFile有个"访问时间"的属性可以利用一下
ghost129 2009-08-08
  • 打赏
  • 举报
回复
在计事本中加一个,删一个会认为你已经访问了该文件夹了,"比较字符串的大小来判断"不可行

16,548

社区成员

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

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

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