是在EVC中编程,运行在WinCE中我建立了一个对话框类,在其中画两个图,m_hBmpBg(背景),m_hBmpBall(前景)。想让前景透明,使用了TransparentBlt函数。但其第一个参数设为CDC memDC就不行,直接用CPaintDC dc就可以。不知道问题出在哪里?void CTest13Dlg::OnPaint() 
{
 CPaintDC dc(this); 
 
 CDC memDC;
 memDC.CreateCompatibleDC(&dc);
 HBITMAP hBmp = (HBITMAP)memDC.SelectObject(m_hBmpBg); CDC ImageDC;
 ImageDC.CreateCompatibleDC(&dc);
 HBITMAP hOldBmp = (HBITMAP)ImageDC.SelectObject(m_hBmpBall); TransparentBlt(memDC.m_hDC, 0, 0, 218, 199, ImageDC.m_hDC, 0, 0, 218, 199, RGB(0,0,0xff));  //直接将memDC.m_hDC换成dc.m_hDC就可以
 
 ImageDC.SelectObject(hOldBmp);
 ImageDC.DeleteDC();
 
 dc.BitBlt(0, 0, 300, 300, &memDC, 0, 0, SRCCOPY); memDC.SelectObject(hBmp);
 memDC.DeleteDC();
}
谢谢!现在分比较少。以后一定加分!

解决方案 »

  1.   

    你在调用TransparentBlt()函数之前,调用memDC.BitBlt()函数将dc的矩形大小也选择进入,试试!
      

  2.   

    是在TransparentBlt()函数上一行加:
    memDC.BitBlt(0, 0, 443, 320, &dc, 0, 0, SRCCOPY); 吗?还是不行,TransparentBlt()函数返回值为零,也就是这个函数调用失败。
      

  3.   

    不在EVC中编程,在Visual Studio.net中上面程序就没有问题。
    是不是WinCE中有什么限制?
      

  4.   

    TransparentBltQuickInfo
      Windows NT: Requires version 5.0 or later.
      Windows: Requires Windows 98 or later.
      Windows CE: Unsupported.
      Header: Declared in wingdi.h.
      Import Library: Included as a resource in msimg32.dll.MSDN 2001 Oct中的说明,不知道最新的是否支持;
      

  5.   

    但是我函数第一个参数为dc.m_hDC就可以啊。
      

  6.   

    多谢提示,我解决了类似的问题。
    我用的是VS2005的智能设备项目,不知道你说的VS.net是不是指的这个