在OnCtlColor()函数中,pDC->SetBkMode(TRANSPARENT)   Edit控件的字显示在滚动时会模糊?   HBRUSH   b=CreateSolidBrush(RGB(255,255,255)),return   b,     当Edit滚动时,   黑字会叠在一起,   直至Edit的白色背景完全变黑。     我该怎么办?
请各位帮帮忙!谢谢!

解决方案 »

  1.   

    为何一定要把Edit的背景也设置为TRANSPARENT呢?如果希望使用Edit也透明,需要编写一个继承于CEdit的类,并拦截它的WM_ERASEBKG消息。一般情况下,在OnCtlColor()里,测试一下控件的ID,如果是IDC_STATIC,把它设为TRANSPARENT就行了。
      

  2.   

    谢谢TearyWang不是很明白,能不能写个简单例子,只要有简单结构就行,谢谢!
      

  3.   

    呵呵,其实你把主窗口的背景色设为白的,Edit就是透明的了
      

  4.   

    CMyEditCtrl::CMyEditCtrl()
    {
    m_brHollow.CreateStockObject(HOLLOW_BRUSH);
    m_x = 0;
    m_y = 0;
    }CMyEditCtrl::~CMyEditCtrl()
    {
    }
    BEGIN_MESSAGE_MAP(CMyEditCtrl, CEdit)
    //{{AFX_MSG_MAP(CMyEditCtrl)
    ON_WM_CTLCOLOR_REFLECT()
    ON_WM_LBUTTONUP()
    ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
    //}}AFX_MSG_MAP
    ON_WM_ERASEBKGND()
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CMyEditCtrl message handlersHBRUSH CMyEditCtrl::CtlColor(CDC* pDC, UINT nCtlColor) 
    {
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(0xff,0xff,0xff));
    return m_brHollow;
    }void CMyEditCtrl::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    Invalidate();
    CEdit::OnLButtonUp(nFlags, point);
    }void CMyEditCtrl::OnChange() 
    {
    Invalidate();
    // if(m_hDlgWnd != NULL)
    // CLogManager::instance()->ReportDialPageMsg(m_hDlgWnd);
    GetWindowText(m_strGetString);
       GetParent()->SendMessage(WM_INSERTMSG,0,LPARAM((LPCTSTR)m_strGetString));      
    }BOOL CMyEditCtrl::OnEraseBkgnd(CDC* pDC) 
    {
    BITMAP bm;
    m_bmp.GetBitmap(&bm);
    m_pbmCurrent = &m_bmp;
    CDC dcMem;
    dcMem.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = dcMem.SelectObject(m_pbmCurrent);
    pDC->BitBlt(m_x,m_y,bm.bmWidth-12,bm.bmHeight,&dcMem,0,0,SRCCOPY);
    dcMem.SelectObject(pOldBitmap);
        return TRUE; 
    }
    这个是加背景图的Edit,看看,对你有没有帮助
      

  5.   

    HBRUSH 类名::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    { if ( pWnd->GetDlgCtrlID() != IDC_STATIC )
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    return hbr;
    }
    else
    {
    pDC->SetBkMode(TRANSPARENT);
    return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
    }
    }
      

  6.   

    上面有个小错误,用这个HBRUSH 类名::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    { if ( pWnd->GetDlgCtrlID() != IDC_STATIC ) 

    HBRUSH hbr = 父类::OnCtlColor(pDC, pWnd, nCtlColor); 
    return hbr; 

    else 

    pDC->SetBkMode(TRANSPARENT); 
    return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);