本帖最后由 u012410439 于 2013-10-12 07:05:34 编辑

解决方案 »

  1.   

    人好少,这是一个MFC对话框程序
      

  2.   

    重写了OnInitDialog()但调试运行,程序没有运行过CAboutDlg::OnInitDialog()
      

  3.   

    确定你的控件在CAboutDlg里面?
      

  4.   

    那会在哪里呢,我看了只有CAboutDlg里有重写OnInitDialog()函数的选项,我是初学者,看网上的一点点学的。程序是从CFrameWnd派生的。
      

  5.   

    那里放在aboutdlg
    的init函数里面有啥用
      

  6.   

    上面说错了,CMy**View是从CFormView派生的。我试了把OnEnChangeRichedit21()放在View类里也没用,也是连OnInitDialog()都没调用
      

  7.   

    嗯我会的,不过首先重写的这个OnInitDialog()函数就没有调用是怎么回事,我用的的VC2008
      

  8.   

    我感觉编程应该比开车要难吧,你要拿个驾照还要去系统的学习半年呢?是吧!
    首先BOOL CAboutDlg::OnInitDialog()这句是啥意思,你搞清楚了吗?
     
      

  9.   

    CDialog有个虚函数virtual BOOL OnInitDialog();该函数在窗口创建完成后调用,所以我们一般都是重写这个虚函数完成UI初始化。BOOL XXDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
    richedit.SetLimitText(100);  //这个肯定会有效的,如果无效,可能是richedit某个标记没有设置
    return TRUE;
    }
      

  10.   

     OnInitDialog是Dialog专用的,Frame和View类不会调用的
      

  11.   

    好吧,我奇葩了,我觉得关键问题是在CFormView作为基类建立单文档时在IDD_**_FORM这个对话框里加入rich edit在程序运行时是不会调用OnInitDialog函数的,但是紧接着试了一下,在点击菜单上的帮助时弹出对话框前会调用OnInitDialog,这可能说明以CFormView作为基类建立单文档产生的IDD_**_FORM这个对话框和普通对话框不一样。
      

  12.   

    我不是提醒你了吗!要清楚CAbout::Oninitdialog()这句话代表什么意思。
    你在about对话框的成员函数里直接访问fromview里面的控件,能不出错么?
      

  13.   

    你是说CAbout是跟菜单项的那个“关于”相关的吗,才发现,我果然奇葩了,可是在别的类里找不到OnInitDialog函数,那添加的OnEnChangeRichedit21()里提示的信息怎么做。
      

  14.   

    你使用FromView,那么FromView会根据对话框资源创建View界面的,在你的View派生类里面做处理就可以了,View不是也有OnInitialUpdate之类的地方吗
      

  15.   

    MFC 有2种窗口。
    一个 是 Frame 为基础的。
    一个 是 对话框。2种 窗口 是 不同的。
      

  16.   

    按钮放在FormView里,给他关联一个变量m_edit
    然后添加EN_CHANGE消息void CViewTestView::OnInitialUpdate()
    {
    CFormView::OnInitialUpdate();
    GetParentFrame()->RecalcLayout();
    ResizeParentToFit();
    m_edit.SetEventMask(m_edit.GetEventMask() | ENM_SCROLL | ENM_CHANGE | ENM_SELCHANGE);//就这样设置}void CViewTestView::OnChangeRichedit1() 
    {
    // TODO: If this is a RICHEDIT control, the control will not
    // send this notification unless you override the CFormView::OnInitDialog()
    // function and call CRichEditCtrl().SetEventMask()
    // with the ENM_CHANGE flag ORed into the mask.
    MessageBox("Fck");//随便你干神马
    // TODO: Add your control notification handler code here

    }