回复人: strip(阿飞) (  ) 信誉:97  2002-3-20 14:44:15  得分:3  
 
 
  重载CEditEx::CtlColor, 就是classwizard里面的“=WM_CTLCOLOR” (而不是WM_CTLCOLOR)给CEditEx增加三个成员变量:
    CBrush   m_brBkGround;
    COLORREF m_crBkColor;
    COLORREF m_crTextColor;在构造函数里面:
CEditEx::CEditEx()
{
    m_crTextColor = ::GetSysColor( COLOR_WINDOWTEXT );
    m_crBkColor   = RGB(255,0,0);
    m_brBkGround.CreateSolidBrush( RGB(255,0,0) );
}
在消息处理里面:HBRUSH CEditEx::CtlColor(CDC* pDC, UINT nCtlColor) 
{
    pDC->SetTextColor( m_crTextColor );
    pDC->SetBkColor( m_crBkColor );
    return (HBRUSH)m_brBkGround;

 
 
Top 
 
 回复人: strip(阿飞) (  ) 信誉:97  2002-3-20 14:44:36  得分:2  
 
 
  或者:在父窗口中加一个CBrush成员,在父窗口的OnCtlColor中设定cbrush,返回.if(pWnd->m_hWnd==MyEdit.m_hWnd)
{//设顶brush
return (HBRUSH)MyBrush;

 
 
Top 
 
 回复人: shenxiaohu() (  ) 信誉:100  2002-3-20 15:03:33  得分:0  
 
 
  我使用classwizard没有找到OnCtlColor这个事件,还有我的这个Edit是动态生成的,该如何处理? 
 
 
Top 
 
 回复人: strip(阿飞) (  ) 信誉:97  2002-3-20 15:42:16  得分:3  
 
 
  第一种方法是重载CEdit生成CEditEx,然后用CEditEx动态生成第二种是在父窗口的WM_CTLCOLOR消息处理里面判断pWnd->m_hWnd==你动态生成的Edit的HWND 
 
 
Top 
 
 回复人: zzWind() (  ) 信誉:100  2002-4-18 15:23:47  得分:12  
 
 
  增加OnCtlColor  事件然后判断是否为CTLCOLOR_EDIT   即可 
 
 
搜的,呵呵!

解决方案 »

  1.   

    http://vcworm.51.net/interface/clredit.htm
      

  2.   

    映射消息 WM_CTLCOLOR 在下面函数中处理
    afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );
      

  3.   

    我按你们说的做的,确实可以,不过有个问题,后面那些字都重叠了
    代码在这里,哪里有问题呢?
    HBRUSH CEvilDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if(pWnd->m_hWnd==m_HwndEdit)
    {
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(255,255,255));
    return (HBRUSH)m_hbrush;
    }  // TODO: Change any attributes of the DC here

    // TODO: Return a different brush if the default is not desired
    return hbr;
    }
      

  4.   

    evilstar(大宝),我也按照你的代码做了,没有出现你说的“后面那些字都重叠了”现象呀,再看看是怎么回事吧。
      

  5.   

    我用的怎么不行啊??
    error C2352: 'CEditEx::SetForeColor' : illegal call of non-static member function
           : see declaration of 'SetForeColor'
      

  6.   

    COLORREF  m_clrFore = RGB(0,0,0);
    CEditEx::SetForeColor(m_clrFore);
      

  7.   

    映射消息 WM_CTLCOLOR 在下面函数中处理
    //m_brush是背景色HBRUSH CEditDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here
    if(pWnd->GetDlgCtrlID() == IDC_EDIT_TEST)
        {
            pDC->SetBkMode(TRANSPARENT);
            pDC->SetTextColor(RGB(255,0,0));    
    hbr = m_brush;
        } 

    // TODO: Return a different brush if the default is not desired
    return hbr;
    }