首先我使用对话框+RichEdit控件模拟的一个记事本程序,我想实现这个功能,就是点击退出的时候看一下编辑部分是否改变了,如果改变的话,那就弹出保存对话框。如果打开后什么都不做,那退出的时候必然是直接退出。目前我遇到的文件就是如何监视RichEdit控件输入文本部分的改变,我试过通过比较字符串的大小来判断,但是你添加一个再删除一个字符就会出现逻辑上的问题,所以我想到必须监视编辑部分的变化,一点发生了变化,就需要保存。但是如何监视变化呢,请各位高手帮忙分析一下,想了好几个小时,不知道怎么做,急。

解决方案 »

  1.   

    可以试下CFile类,用个线程用以监视该文件,CFile有个"访问时间"的属性可以利用一下
      

  2.   

    监视RichEdit控件输入文本部分的改变:
    添加 一个成员变量 来标记 文本是否发生变化
    映射 RichEdit控件的 EN_CHANGE,(在编辑器双击RichEdit控件 就会生成对应的函数)
    在函数里修改 这个成员变量添加一个再删除这个字符,退出时不保存?
    Windows的记事本都没这功能,其他多数的编辑器都没
    估计实现起来很麻烦
      

  3.   

    如果LZ用SDI做的话,这个问题就好解决了。文档类中已经有相应的框架,改变数据后标记一下就行了。
      

  4.   

    你OnKeyDown不就行了,要不你就OnTimer
      

  5.   

    RichEdit没有一个onchange之类的事件吗?
      

  6.   

    的确有个enchange事件,我在事件里设置了变量然后通过这个变量来判断,但是不行,调试的时候在编辑框输入文字根本就不进入这个函数,可见这个函数没有执行。所以我不知道是否还应该在void CNotepad_beta1Dlg::OnChangeRichedit1() 函数中设置什么?
      

  7.   

    我查了个资料,试着在OnInitDialog()中填入:
    long lMask = m_myREdit.GetEventMask();
    lMask |= ENM_CHANGE;
    lMask &= ~ENM_PROTECTED;
    m_myREdit.SetEventMask(lMask);
    然后在进行onchange的操作,问题解决。
      

  8.   

    用CRichEditCtrl::GetModify可以看到是不是改变了吧~
      

  9.   

    没必要这么复杂的,你只要在编辑框加载完文本,之后获取编辑框的文本,将其保存到变量里.
    然后当用户关闭程序时,响应WM_CLOSE消息,再次获取编辑框文件,看前后这两个变量是否相同,若不同,则提示用户。