具体情况是这样的:
我用ATL做了一个简单的控件,不支持MFC,主要就是用了公共属性Picture,然后重写了OnDraw函数.已经实现了.
但应用的时候图片自身的填充色和对话框不一样的颜色,很难看,如何在程序中过滤图片的填充色呢?
TransparentBlt()可以吗,如何使用是好?(不支持MFC)给个例子更好!
谢谢先.

解决方案 »

  1.   

    TransparentBlt可以。SDK跟MFC的使用方法差不多。具体查阅一下MSDN你就清楚了。
      

  2.   

    谢谢!
    这个函数的参数中,目标hdc是什么呢?参数好多阿
    刚学这一块,真难啊
    有朋友给个自己写的简单例子吗.
    [email protected]
      

  3.   

    以下是我的部分代码,斜杠包围部分是希望位图透明的代码,没加这段前图片显示正常。加上后也没见透明。希望高手告知。谢谢!
    HRESULT OnDraw(ATL_DRAWINFO& di)
    {
        USES_CONVERSION;

        RECT& rc = *(RECT*)di.prcBounds;
        HDC hdcSrc = di.hdcDraw;  // 源DC吧
       
        //////////////////////////////////////////////////////////////////////////
        //如何定义目标DC,另外加上透明函数后下面用到的DC都是hdcDesc吧
        //HDC hdcDesc ...
        //TransparentBlt(hdcDesc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, hdcSrc, 
        // 0, 0, rc.right - rc.left, rc.bottom - rc.top, RGB(255, 255, 255));
        ///////////////////////////////////////////////////////////////////////////     // 设置背景为透明
       SetBkMode(hdcSrc , TRANSPARENT);
     
       // 以下解决图片颠倒问题,改变Y轴方向
       // 设置映射模式   SetMapMode(hdcSrc , MM_ANISOTROPIC);

       // 设置新的原点   POINT orgViewPoint;
       SetViewportOrgEx(hdcSrc, rc.left, rc.bottom , &orgViewPoint);    SIZE orgSize;
       SetWindowExtEx(hdcSrc, rc.right - rc.left, -(rc.bottom - rc.top), &orgSize);
       SetViewportExtEx(hdcSrc, rc.right - rc.left, rc.bottom - rc.top, &orgSize);   // 显示图片   LPPICTURE pPict ;
       DWORD dwAttr ;
       OLE_XSIZE_HIMETRIC cxSrc;
       OLE_YSIZE_HIMETRIC cySrc;
       if ((m_pPicture != NULL) &&SUCCEEDED(m_pPicture->QueryInterface(IID_IPicture, (LPVOID*)&pPict)))
       {
    pPict->get_Attributes(&dwAttr);
    if(dwAttr==S_OK)
    {
        pPict->get_Width(&cxSrc);
        pPict->get_Height(&cySrc);
        pPict->Render(hdcSrc, rc.left, rc.top, rc.right, rc.bottom, 0, 0, cxSrc, cySrc, &rc);
    }
      }
      return S_OK;
    }
    // m_pPicture为添加公共属性picture后Wizard自动添加
    CComPtr<IPictureDisp> m_pPicture;