本帖最后由 VisualEleven 于 2014-01-15 20:31:05 编辑

解决方案 »

  1.   

     重写CStatic类,在OnPaint函数中去贴图。
      

  2.   

    LRESULT CSYourControl::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    {
        PAINTSTRUCT stPaintStruct;
        HDC hDC = ::BeginPaint(m_hWnd, &stPaintStruct);    RECT rcDialog = { 0 };
        ::GetClientRect(m_hWnd, &rcDialog);    HDC hCacheDC = ::CreateCompatibleDC(hDC);
        HBITMAP hCacheBitmap = ::CreateCompatibleBitmap(hDC, rcDialog.right, rcDialog.bottom);
        ::SelectObject(hCacheDC, hCacheBitmap);    HBRUSH hBackBrush = ::CreateSolidBrush(RGB(255, 255, 255));
        ::FillRect(hCacheDC, &rcDialog, hBackBrush);
        ::DeleteObject(hBackBrush);    ::DrawIcon(hCacheDC, x, y, m_hYourIcon);    ::BitBlt(hDC, 0, 0, rcDialog.right, rcDialog.bottom, hCacheDC, 0, 0, SRCCOPY);    ::DeleteObject(hCacheBitmap);
        ::DeleteDC(hCacheDC);    ::EndPaint(m_hWnd, &stPaintStruct);    return 0;
    }
      

  3.   

    BOOL CkkkStatic::OnEraseBkgnd(CDC* pDC)
    {
    if (m_Bmp.GetSafeHandle() == NULL)
    {
    CRect Rect;
    GetWindowRect(&Rect);
    CWnd *pParent = GetParent();
    ASSERT(pParent);
    pParent->ScreenToClient(&Rect); CDC *pDC = pParent->GetDC();
    CDC MemDC;
    MemDC.CreateCompatibleDC(pDC);
    m_Bmp.CreateCompatibleBitmap(pDC,Rect.Width(),Rect.Height());
    CBitmap *pOldBmp = MemDC.SelectObject(&m_Bmp); MemDC.BitBlt(0,0,Rect.Width(),Rect.Height(),pDC,Rect.left,Rect.top,SRCCOPY); MemDC.SelectObject(pOldBmp); pParent->ReleaseDC(pDC);
    }
    else
    {
    CRect Rect;
    GetClientRect(Rect);
    CDC MemDC;
    MemDC.CreateCompatibleDC(pDC);
    CBitmap *pOldBmp = MemDC.SelectObject(&m_Bmp);
    pDC->BitBlt(0,0,Rect.Width(),Rect.Height(),&MemDC,0,0,SRCCOPY);
    MemDC.SelectObject(pOldBmp);
    } return TRUE;
    }void CkkkStatic::OnNcPaint()
    {
    if(GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)&WS_EX_CLIENTEDGE)
    {
    CDC *pDC = GetWindowDC();
    CRect rt;
    GetWindowRect(&rt);
    rt.OffsetRect(-rt.left,-rt.top); CPen pen;
    rt.DeflateRect(1, 1);
    pen.CreatePen(PS_SOLID,1,RGB(0, 0, 0));
    CPen *pOldPen = pDC->SelectObject(&pen);
    CBrush *pOldBursh = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
    pDC->Rectangle(&rt);
    pDC->SelectObject(pOldPen);
    pDC->SelectObject(pOldBursh);
    pen.DeleteObject();
    }
    else
    {
    CStatic::OnNcPaint();
    }
    }
    重绘控件,仅供参考