这是基于CTabctrl代码:
void CTabWnd::OnPaint() 
{
CPaintDC dc( this ); CRect rc; dc.GetClipBox( &rc ); dc.FillSolidRect( &rc , RGB( 238 , 239 , 239 ) ); CTabCtrl::DefWindowProc( WM_PAINT ,( WPARAM )dc.GetSafeHdc( ) , 0 );
}
如何把它改成图片背景显示?谢谢!!

解决方案 »

  1.   

    画背景还是在OnEraseBkgnd中,在Paint中会把子控件给覆盖了CRect rcClient;
    CBitmap  bitmap;
    CBitmap *pOldBitmap;
    CDC dcMem;
    BITMAP bmpInfo;GetClientRect(&rcClient);
    dcMem.CreateCompatibleDC(pDC);
    bitmap.LoadBitmap(IDB_BITMAP1);
    pOldBitmap = dcMem.SelectObject(&bitmap);
    bitmap.GetBitmap(&bmpInfo);
    pDC->BitBlt(rcClient.left, rcClient.top, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMem, 0, 0, SRCCOPY);
    dcMem.SelectObject(pOldBitmap);VERIFY(dcMem.DeleteDC());
      

  2.   

    http://topic.csdn.net/t/20020612/10/796799.html
      

  3.   

    如下:CPaintDC dc(this); // device context for painting
    // TODO: 在此处添加消息处理程序代码
    // 不为绘图消息调用 CDialog::OnPaint()
    CBitmap m_bmpBackground;
    m_bmpBackground.LoadBitmap(位图ID);
    CDC dcMem; 
    dcMem.CreateCompatibleDC(&dc);     //创建与对话框dc兼容的内存dc
    CRect rect;
    GetClientRect(&rect);
    BITMAP bitMap;
    m_bmpBackground.GetBitmap(&bitMap);
    CBitmap *pbmpOld=dcMem.SelectObject(&m_bmpBackground);    //将背景位图选入内存dc中
    dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);
        //dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);
    dc.SelectObject(pbmpOld);
      

  4.   

    谢谢!!刚才我用了3楼的代码已经实现了,但是我用到标签代码时怎么就不行呢?
    void CTabWnd::DrawItem( LPDRAWITEMSTRUCT lpDS )
    {
    CDC dc; dc.Attach( lpDS->hDC ); char buf[255]; TCITEM item; item.mask = TCIF_TEXT;  item.pszText = buf; item.cchTextMax = sizeof( buf ); this->GetItem( lpDS->itemID , &item ); dc.SetBkMode( TRANSPARENT ); dc.SetTextColor( RGB( 28 , 98 , 140 ) ); CRect rc( lpDS->rcItem ); if( lpDS->itemID == this->GetCurSel( ) )
    {
    dc.FillSolidRect( &rc , RGB( 220 , 238 , 251 ) ); rc.OffsetRect( 1 , 3 );
    } dc.DrawText( buf , &rc , DT_CENTER ); dc.Detach( );
    }
      

  5.   

    dc.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), pDisplayMemDC, 0, 0, SRCCOPY); 用这个试试