首先你要搞明白EN_CHANGE消息是编辑框的通告消息,是发到父窗口的WM_COMMAND消息,你的控件怎么能接受呢??

解决方案 »

  1.   

    要向编辑框发送消息可以用SendDlgItemMessage向控件发送消息
      

  2.   

    可是在文档视图结构中,我想在View中处理这一消息该怎么办呢?如何知道CRichEditCtrl的ID呢?
      

  3.   

    CRichEditCtrl* pREC=(CRichEditCtrl *)GetDlgItem(ID);
    可以获取对象的指针,ID是你创建这个控件后会在Resource.h里有,可以去查
      

  4.   

    因为这个消息是发向父窗口的,而视类又不是该控件的父窗口,我觉得View类是无法处理这个消息的!不过可以考虑在控件父窗口获取这个消息,并在处理时,为了让View类也有响应的变化,可以往View类发送消息!
      

  5.   

    如果真是这样的话,我觉得这是一个Doc/View架构设计上的一个缺陷,如果我想响应编辑控件里文本改变而发送的消息,并且改变Edit中相应的字体,这个工作显然应该由View来做,但是这个消息却被发送到Frame中,而Frame中只能得到View的基类指针,无法通过这个指针来调用你所写的字体处理函数。所以,这个函数只能放到Frame的类中,显得有些乱。
      

  6.   

    Frame可以获得你当前View的指针,但是要把你的View头文件加上,否则不行
    比如:
    CMDIFrameWnd *pFrame=(CMDIFrameWnd *)AfxGetApp()->m_pMainWnd;
    CMDIChildWnd *pChild=(CMDIChildWnd *)pFrame->GetActiveFrame();
    CRichEditView *pView=(CRichEditView *)pChild->GetActiveView();
    不过一定要加上#include "RichEditView.h"
      

  7.   

    我也试过,但是加上我自己的View.h之后,就会出现莫明其妙的编译错误,看来不行啊!
      

  8.   

    呵呵,问题在这里,由于View类的头文件里有个地方需要Doc类的调用,所以这样:
    #include "CRichEditDoc.h"
    #include "CRichEditView.h"
      

  9.   

    重载pretranslatemessage(),做这样的判断,
    if((pMsg->message==WM_KEYDOWN)&&
    (m_Bar.GetFocus()==m_.GetDlgItem(IDC_RECORDMAC)))
    它可以替代en_change来解决你的问题