我在DrawItem()函数里面抄了一段CButtonST的代码(如下PaintBk函数),用来画按纽的背景图,但是编译后,在该按纽的位置出现了一片空白,根本就没出现背景图。
void CMyButton::PaintBk(CDC *pDC)
{
    CClientDC clDC(GetParent());
    CRect rect;
    CRect rect1;    GetClientRect(rect);    GetWindowRect(rect1);
    GetParent()->ScreenToClient(rect1);   if (m_dcBk.m_hDC == NULL)
   {
      m_dcBk.CreateCompatibleDC(&clDC);
      m_bmpBk.CreateCompatibleBitmap(&clDC, rect.Width(), rect.Height());
      m_pbmpOldBk = m_dcBk.SelectObject(&m_bmpBk);
      m_dcBk.BitBlt(0, 0, rect.Width(), rect.Height(),
                          &clDC,rect1.left,rect1.top, SRCCOPY);
    }
    pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &m_dcBk, 0, 0,  
                  SRCCOPY);
}是不是m_dcBk.BitBlt(0, 0, rect.Width(), rect.Height(),
                          &clDC,rect1.left,rect1.top, SRCCOPY);
这段代码有问题,因为rect1的那个区域被按钮占着,结果m_dcBk里面什么也没保存,所以画出来也是空的。如果是上述错误,是不是要在调用上述函数前先将按纽区域的背景图保存下来,但那样的话就必须在按纽初始化前保存,这段代码(保存背景图)该写在哪儿呢?
如果不是上述错误,请给个解决的办法?

解决方案 »

  1.   

    我试了一下,没有错误啊~
    只要你在DrawItem的开始阶段保存画面就行了
    你的可能是被后面画上的东西覆盖了
    你检查一下你的代码,在画上背景后是不是用了
    Rectangle(),FillRect(),FillRgn之类的函数void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
    CClientDC clDC(GetParent());
        CRect rect;
        CRect rect1;
    CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
        GetClientRect(rect);    GetWindowRect(rect1);
        GetParent()->ScreenToClient(rect1);   if (m_dcBK.m_hDC == NULL)
       {
          m_dcBK.CreateCompatibleDC(&clDC);
          m_bmpBK.CreateCompatibleBitmap(&clDC, rect.Width(), rect.Height());
          m_pbmpOldBK = m_dcBK.SelectObject(&m_bmpBK);
          m_dcBK.BitBlt(0, 0, rect.Width(), rect.Height(),
                              &clDC,rect1.left,rect1.top, SRCCOPY);
        }
        pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &m_dcBK, 0, 0,  
                      SRCCOPY);
      pDC->Draw3dRect(rect.left,rect.top,rect.right,rect.bottom,RGB(128,128,28),0);
      pDC->SetBkMode(0);
    pDC->SetTextColor(RGB(255,0,0));
    pDC->SetTextAlign(TA_CENTER);
    pDC->TextOut(rect.Width()/2,rect.Height()/2-5,"透明按纽");
    }