我用的类继承CEdit类,但是CEdit类没办法改行间距,我就改成了CRichEditCtrl类,这样行间距就改好了,但是原来的WM_CTLCOLOR消息触发不了了,该如何处理?

解决方案 »

  1.   

    作为控件类,应该响应反射消息
    ON_WM_CTLCOLOR_REFLECT()

    HBRUSH CXXXXEdit::CtlColor(CDC* pDC, UINT nCtlColor) 
      

  2.   

    刚才没说清楚,我在View类里面的使用
    ON_WM_CTLCOLOR()

    HBRUSH CSeatViewDlg::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor)
    在View类的另外一个地方
    ((CSeatTransferEdit *)m_aSeatEditArray.GetAt(i))->SetWindowText("");
    ((CSeatTransferEdit *)m_aSeatEditArray.GetAt(i))->SetWindowText(strTitle);CSeatTransferEdit 继承CRichEditCtrl,就不调用OnCtlColor。
    要是改成继承CEdit,就可以调用到~~~
      

  3.   

    或者能不能在CEdit里面改变行间距???我查了,好象不行~~~
      

  4.   

    调用CRichEditCtrl类的SetBackgroundColor函数设置背景色。
      

  5.   

    恩,这个我实现了~~~但是HBRUSH CSeatViewDlg::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor) 
    实现了别的功能~~~最好能触发这个消息~~~
      

  6.   

    RichEdit不发WM_CTLCOLOR消息。你想实现什么功能?看看CRichEditCtrl类中是否提供了相关函数。
      

  7.   

    恩~~~我知道~~~我把WM_CTLCOLOR消息的里面实现的功能提出来做了个函数·~~~但是原来触发WM_CTLCOLOR的地方太多,我怕修改遗漏了~~~
      

  8.   

    可以试试‘伪造’一个 WM_CTLCOLOREDIT 消息:★第一步:
    先设置 RichEdit 的 EN_CHANGE 事件掩码,可以重载 控件的 PreSubclassWindow 虚函数,如下:void CMyRichEditCtrl::PreSubclassWindow()
    {
    SetEventMask(ENM_CHANGE); CRichEditCtrl::PreSubclassWindow();
    }
    ★第二步:
    在 EN_CHANGE 事件中伪造 WM_CTLCOLOREDIT 消息,然后在 OnEnChange 中加入如下代码:void CMyRichEditCtrl::OnEnChange()
    {

    CDC * pDC = GetDC();
    HBRUSH hBrush = (HBRUSH)GetParent()->SendMessage(WM_CTLCOLOREDIT,(WPARAM)pDC->m_hDC,(LPARAM)this); // ★ 在这里尝试通过 hBrush 和 pDC 获得你在父窗口的 OnCtlColor() 函数中设置的颜色,祝你好运:) ReleaseDC(pDC);
    }