如题以下是加载png代码void CMyColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)//CMyColorButton派生至CButton
{
CRect rc;
  GetClientRect(&rc);
  CDC dc;
  using namespace Gdiplus;//应用 GDI+前必须的设置
  Graphics graph(GetDC()->m_hDC);
  Image image(_T("C:\\testImg.png"));
  graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
}点击按钮时候,明显看到按钮图标闪烁,查了很多资料说是双缓冲可以解决,但资源都是用bitmap的,请求大牛帮帮忙,给个实例万分感激buttonimagegdi+graph

解决方案 »

  1.   

    GetDC()->m_hDC这个没有使用双缓冲
    CDC dcMem;//以下是输出位图的标准操作
    CBitmap *pOldBitmap = NULL;
    dcMem.CreateCompatibleDC(NULL);
    pOldBitmap = dcMem.SelectObject(&pDoc->m_bmpBuf);graphic(dcMem);
    graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);BITMAP bmpinfo;
    pDoc->m_bmpBuf.GetBitmap(&bmpinfo);
    pDC->BitBlt(0,0,bmpinfo.bmWidth,bmpinfo.bmHeight,&dcMem,0,0,SRCCOPY);
    dcMem.SelectObject(pOldBitmap);
    dcMem.DeleteDC();
      

  2.   


    这个代码我也找过,使用bitmap的,但是bitmap没有半透明,所以必须使用png,求一个png的双缓冲,谢谢
      

  3.   

    http://www.codeproject.com/Articles/26887/A-user-draw-button-that-supports-PNG-files-with-tr