CPaintDC dc(this);

CRect rcclient;
GetClientRect(&rcclient); CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
memdc.SelectObject( &bitmap ); CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0); CDC maskdc;
maskdc.CreateCompatibleDC(&dc);
CBitmap maskbitmap;
maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);
maskdc.SelectObject( &maskbitmap );
maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc, 
rcclient.left, rcclient.top, SRCCOPY); CBrush brush;
brush.CreatePatternBrush(&m_bitmap);
dc.FillRect(rcclient, &brush);

memdc.SetBkColor(RGB(0,0,0));          
memdc.SetTextColor(RGB(255,255,255));  
memdc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
                &maskdc, rcclient.left, rcclient.top, SRCAND); dc.SetBkColor(RGB(255,255,255));
dc.SetTextColor(RGB(0,0,0));
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), 
             &maskdc, rcclient.left, rcclient.top, SRCAND);

dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), 
             &memdc, rcclient.left, rcclient.top,SRCPAINT);
brush.DeleteObject();
}

解决方案 »

  1.   

    这不就是《Visual C++ 游戏编程指南》里面的一部分吗?
      

  2.   

    var
      bmp,maskbmp:TBitmap;
    begin
      bmp:=TBitmap.Create;
      maskBmp:=TBitmap.Create;
      maskBmp:=TBitmap.Create;
      maskBmp.Width:=form1.ClientWidth;
      maskBmp.Height:=form1.ClientHeight;
      bitblt(maskbmp.Canvas.Handle,0,0,clientWidth,clientHeight,bmp.Canvas.Handle,0,0,SRCCOPY);  form1.Canvas.FillRect(form1.ClientRect);  bmp.Canvas.Brush.Color:=rgb(0,0,0);
      bmp.Canvas.Pen.Color:=rgb(255,255,255);
      bitblt(bmp.Canvas.Handle,0,0,clientWidth,clientHeight,maskbmp.Canvas.Handle,0,0,clientWidth,clientHeight,SRCAND);  //....
    end;
      

  3.   

    修正:procedure TForm1.Button1Click(Sender: TObject);
    var
      bmp,maskbmp:TBitmap;
    begin
      bmp:=TBitmap.Create;
      maskBmp:=TBitmap.Create;
      maskBmp.Width:=form1.ClientWidth;
      maskBmp.Height:=form1.ClientHeight;
      bitblt(maskbmp.Canvas.Handle,0,0,clientWidth,clientHeight,bmp.Canvas.Handle,0,0,SRCCOPY);  FORM1.Canvas.Brush.Style:=bsDiagCross;
      form1.Canvas.FillRect(form1.ClientRect);  bmp.Canvas.Brush.Color:=rgb(0,0,0);
      bmp.Canvas.Pen.Color:=rgb(255,255,255);
      bitblt(bmp.Canvas.Handle,0,0,clientWidth,clientHeight,maskbmp.Canvas.Handle,0,0,SRCAND);  //剩下的自己写吧end;
      

  4.   

    是这样的,它的功能是给一个TREEVIEW添加背景图片的,可是我怎么也看不懂,那位高手能帮忙吗?谢谢了
      

  5.   

    不是吧,这段代码明明是《Visual C++ 游戏编程入门》中的啊。请把代码贴完整一点。
      

  6.   

    真的就是这样的,可以在TreeView中添加背景图的
      

  7.   

    请参阅Delphi的样例文件:Delphi7\Demos\CustomDraw
    演示了把图片绘制到TreeView背景的技术。