能否把具有只读属性的Edit控件的背景色改掉?
我试过OnCtrlColor中设背景刷的颜色,设文本的背景色,设文本的背景模式都不起作用。

解决方案 »

  1.   

    subClassing CEdit.
    overrider CEdit::OnCtrlColor
      

  2.   

    总算有人回应了。
    我用的是CEditView,应该已经被subclass了;我在CEditView::OnCtrlColor
    中试过前面说的方法,都不行。
    郁闷中
      

  3.   

    HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {

    // TODO: Change any attributes of the DC here
    if(nCtlColor==CTLCOLOR_STATIC)
    {
    pDC->SetBkColor(RGB(255,0,0));
    return redbrush;
    }
    // TODO: Return a different brush if the default is not desired
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }注意读属性的Edit控件的性质和Static是一样的,所以是
    CTLCOLOR_STATIC
    而不是CTLCOLOR_BTN
      

  4.   

    再次申明,我用的是CEditView,不是edit control,程序为单文档结构。
      

  5.   

    不好意思
    没看到是在CEditView
      

  6.   

    可以这样,在你的CEditView派生类中加WM_ERASEBKGND的消息处理
    即在OnEraseBkgnd(CDC  *pDC)中加入

    .....
    CRect rect;
    pDC->GetClipBox( &rect );
    CBrush brush( m_crBackColor );
    CBrush* pOldBrush = pDC->SelectObject( &brush );
    pDC->PatBlt(rect.left, rect.top,rect.Width(), rect.Height ( ),PATCOPY );
    pDC->SelectObject( pOldBrush );
    .....
      

  7.   

    hoho,自己解决了,要用message reflection
    BEGIN_MESSAGE_MAP(CServerView, CEditView)
    ON_WM_CTLCOLOR_REFLECT()
    END_MESSAGE_MAP()
    ....HBRUSH CServerView::CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/)
    {
    return (HBRUSH)GetStockObject(WHITE_BRUSH);
    }