~~~这是我显示位图的程序,望高手在此基础上给出代码!
CDC  dc;
CDC * pDC = GetDC();
if(!dc.CreateCompatibleDC(pDC))
{
   return;
}
CBitmap b,*pOld;
BITMAP  bm;
HBITMAP  hbmp = (HBITMAP)LoadImage(NULL, _T(m_FileName), IMAGE_BITMAP,
0, 0, LR_CREATEDIBSECTION |LR_DEFAULTSIZE|LR_LOADFROMFILE);
b.Attach(hbmp);b.GetBitmap(&bm);
pOld = dc.SelectObject(&b);int width = int(bm.bmWidth/2);
int height = int(bm.bmHeight/2);
pDC->StretchBlt(x,y,width,height,&dc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dc.SelectObject(pOld);

解决方案 »

  1.   

    这是我常用的透明显示位图的函数:
    //参数:设备句柄,位图文件名,显示位置,要设为透明的颜色
    void DrawTransBmp(HDC hdc,CString FileName,int x,int y,COLORREF clrTrans)
    {
    BITMAP bmp;
    COLORREF clr;
    HBITMAP bmpBack;
    HBITMAP bmpBackOld,bmpMemOld;
    HDC hdcMem,hdcBack;
    POINT pt;
    HBITMAP m_bmpTrans;

    m_bmpTrans=(HBITMAP)LoadImage(NULL,FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    hdcMem=CreateCompatibleDC(hdc);
    bmpMemOld=(HBITMAP)SelectObject(hdcMem,m_bmpTrans); GetObject(m_bmpTrans,sizeof(BITMAP),(LPVOID)&bmp);
    pt.x=bmp.bmWidth;
    pt.y=bmp.bmHeight; hdcBack=CreateCompatibleDC(hdc); bmpBack=CreateBitmap(pt.x,pt.y,1,1,NULL);
    bmpBackOld=(HBITMAP)SelectObject(hdcBack,bmpBack); clr=SetBkColor(hdcMem, clrTrans);
    BitBlt(hdcBack, 0,0,pt.x, pt.y,hdcMem,0,0,SRCCOPY);
    SetBkColor(hdcMem,clr); BitBlt(hdc,x,y,pt.x,pt.y,hdcBack,0,0,SRCAND);
    BitBlt(hdc,x,y,pt.x,pt.y,hdcMem,0,0,SRCPAINT); DeleteObject(SelectObject(hdcBack,bmpBackOld));
    SelectObject(hdcMem,bmpMemOld); DeleteDC(hdcBack);
    DeleteDC(hdcMem);
    }
    //例如:DrawTransBmp( pDC->GetSafeHdc(),"bmpname.bmp",10,10,RGB(0,0,0) );
      

  2.   

    ~~~楼上的说的是对,但要设置透明色啊,我要是透明色不固定呢,就是这样我的dialog背景是白色,上面有字是黑色,现在我的图片贴上去就是不能把字覆盖,就象盖章的效果一样,请问怎么实现
      

  3.   

    去www.vckbase.com下的VC知识库文章 ,里面有一篇讲透明位图的显示的文章,可以透明掉指定的颜色
    void TransparentBlt2( HDC hdcDest,      // 目标DC
    int nXOriginDest,   // 目标X偏移
    int nYOriginDest,   // 目标Y偏移
    int nWidthDest,     // 目标宽度
    int nHeightDest,    // 目标高度
    HDC hdcSrc,         // 源DC
    int nXOriginSrc,    // 源X起点
    int nYOriginSrc,    // 源Y起点
    int nWidthSrc,      // 源宽度
    int nHeightSrc,     // 源高度
    UINT crTransparent  // 透明色,COLORREF类型
    )
    {
    HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 创建兼容位图
    HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图
    HDC hImageDC = CreateCompatibleDC(hdcDest);
    HDC hMaskDC = CreateCompatibleDC(hdcDest);
    hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
    hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP); // 将源DC中的位图拷贝到临时DC中
    if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);
    else
    StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, 
    hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY); // 设置透明色
    SetBkColor(hImageDC, crTransparent); // 生成透明区域为白色,其它区域为黑色的掩码位图
    BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY); // 生成透明区域为黑色,其它区域保持不变的位图
    SetBkColor(hImageDC, RGB(0,0,0));
    SetTextColor(hImageDC, RGB(255,255,255));
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND); // 透明部分保持屏幕不变,其它部分变成黑色
    SetBkColor(hdcDest,RGB(255,255,255));
    SetTextColor(hdcDest,RGB(0,0,0));
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND); // "或"运算,生成最终效果
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT); // 清理、恢复
    SelectObject(hImageDC, hOldImageBMP);
    DeleteDC(hImageDC);
    SelectObject(hMaskDC, hOldMaskBMP);
    DeleteDC(hMaskDC);
    DeleteObject(hImageBMP);
    DeleteObject(hMaskBMP);
    }
      

  4.   

    你也可以做一个半透明的图贴上去
    这样字就可以显出来了,用
    AlphaBlend(
      HDC hdcDest,
      int nXOriginDest,
      int nYOriginDest,
      int nWidthDest,
      int hHeightDest,
      HDC hdcSrc,
      int nXOriginSrc,
      int nYOriginSrc,
      int nWidthSrc,
      int nHeightSrc,
      BLENDFUNCTION blendFunction
    );
    用法和BitBlt函数相似
      

  5.   

    ~~~问题解决了,就用的TransparentBlt2