比如说现在有人一个Bitmap资源ID是:IDB_BITMAP1,我想让他在对话框上显示白色为透明,请问高手们,我要怎么做?
最好就给个源码或者实例给我好么?。。

解决方案 »

  1.   


    void Util::DrawTransparent(HDC hdc,HBITMAP hBit,int x,int y,int width,int height,COLORREF crColor)
    {
    // COLORREF crOldBack = ::SetBkColor(hdc,crColor);
    COLORREF crOldBack = ::SetBkColor(hdc,RGB(255,255,255));
    COLORREF crOldText = ::SetTextColor(hdc,RGB(0,0,0));
    HDC dcImage,dcMask;
    int nWidth = width;
    int nHeight = height; dcImage = ::CreateCompatibleDC(hdc);
    dcMask = ::CreateCompatibleDC(hdc);
    //把图像装入image DC
    RECT rect = {0,0,width,height};
    HBITMAP htmp = NULL;
    HGDIOBJ pOldBitmapImage = NULL;
    {
    htmp = ::CreateCompatibleBitmap(hdc,width,height);
    pOldBitmapImage = ::SelectObject(dcImage,htmp); HDC htmpdc = ::CreateCompatibleDC(hdc);
    ::SelectObject(htmpdc,hBit);
    /* HBRUSH hbr = ::CreateSolidBrush(crColor);
    ::FillRect(dcImage,&rect,hbr);
    ::DeleteObject(hbr);*/ SIZE *pSize = Util::GetBitSize(hBit);
    ::StretchBlt(dcImage,0,0,width,height,htmpdc,0,0,pSize->cx,pSize->cy,SRCCOPY); ::DeleteDC(htmpdc); }
    //为“掩码”位图创建一个单色bitmap
    HBITMAP bitmapMask;
    bitmapMask = ::CreateBitmap(nWidth,nHeight, 1, 1, NULL); 
    HGDIOBJ pOldBitmapMask = ::SelectObject(dcMask,bitmapMask);
    ::SetBkColor(dcImage,crColor);

    ::BitBlt(dcMask,0, 0, nWidth, nHeight, dcImage, 0, 0, SRCCOPY);//分3步进行实际的绘制
    ::BitBlt(hdc,x, y, nWidth, nHeight, dcImage, 0, 0, SRCINVERT);
    ::BitBlt(hdc,x, y, nWidth, nHeight, dcMask, 0, 0, SRCAND);
    ::BitBlt(hdc,x, y, nWidth, nHeight, dcImage, 0, 0, SRCINVERT); //恢复原先设置 ::SelectObject(dcImage,pOldBitmapImage);
    ::SelectObject(dcMask,pOldBitmapMask);
    ::SetBkColor(hdc,crOldBack);
    ::SetTextColor(hdc,crOldText);
    ::DeleteObject(htmp);
    ::DeleteObject(bitmapMask);
    ::DeleteDC(dcImage);
    ::DeleteDC(dcMask);
    }
      

  2.   

    楼上的,可以的话,请把那个
    Util::GetBitSize(hBit); 
    也贴出来吧
      

  3.   

    http://www.vckbase.com/document/viewdoc/?id=532 这个基本类似,原来那个不知道扔哪里去了
    SIZE *Util::GetBitSize(HBITMAP hBit)
    {
    static SIZE size = {0,0};
    BITMAP   bminfo = {0};   
    GetObject(hBit,   sizeof(BITMAP),   &bminfo);
    size.cy = bminfo.bmHeight;
    size.cx = bminfo.bmWidth;
    return &size;
    }