请教下针对当前enable的控件我可以使用onctlcolor方法进行重绘,但是遇到当且Disable的空间该如何绘制呢?如图所示,我仅仅重绘了enable的Edit控件,但是如果当前状态下不可用,那该Edit控件又变成了默认的背景色了.而这是我所不希望的。希望给与指点,谢谢!

解决方案 »

  1.   

    http://hiphotos.baidu.com/jiangshan2%5F0/pic/item/faa2adfdc64ba43409244dad.jpeg
      

  2.   

    重载控件类,以BUTTON为例void CBVButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
    // TODO: Add your message handler code here and/or call default
    CRect rcBton;
    CDC *pDC; UINT state;
    UINT action;
    UINT CtrID; CBitmap bitmap;
    CBitmap *pOldBitmap;
    CDC dcMem;
    BITMAP s_Bmp; rcBton.CopyRect(&lpDrawItemStruct->rcItem);
    pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
    state = lpDrawItemStruct->itemState;
    action = lpDrawItemStruct->itemAction;
    CtrID = lpDrawItemStruct->CtlID; dcMem.CreateCompatibleDC(pDC); pDC->SetBkMode(TRANSPARENT); if (state & ODS_DISABLED)  //禁用状态
    {
    if (bitmap.LoadBitmap(BMP_DISABLED)
    {
    pOldBitmap = dcMem.SelectObject(&bitmap);
    bitmap.GetBitmap(&s_Bmp);
    TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(),
    dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255));
    dcMem.SelectObject(pOldBitmap);
    }
    }
    else if (m_bMouseOver == TRUE)   
    {
    if (state & ODS_SELECTED)   //选中
    {
    if (bitmap.LoadBitmap(BMP_SELECTED))
    {
    pOldBitmap = dcMem.SelectObject(&bitmap);
    bitmap.GetBitmap(&s_Bmp);
    TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(),
    dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255));
    dcMem.SelectObject(pOldBitmap);
    }
    }
    else if (bitmap.LoadBitmap(BMP_MOUSEHOVE)   //光标在button上
    {
    pOldBitmap = dcMem.SelectObject(&bitmap);
    bitmap.GetBitmap(&s_Bmp);
    TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(),
    dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255));
    dcMem.SelectObject(pOldBitmap);
    }
    }
    else
    {
    if (bitmap.LoadBitmap(BMP_NORMAL)        //普通状态
    {
    pOldBitmap = dcMem.SelectObject(&bitmap);
    bitmap.GetBitmap(&s_Bmp);
    TransparentBlt(pDC->m_hDC, rcBton.left, rcBton.top, rcBton.Width(), rcBton.Height(),
    dcMem.m_hDC, 0, 0, s_Bmp.bmWidth, s_Bmp.bmHeight, RGB(255, 0, 255));
    dcMem.SelectObject(pOldBitmap);
    }
    } VERIFY(dcMem.DeleteDC());
    }