[求助]VC6下正常贴的图eVC下“花图”(类似花屏)

joan2003   2009-8-23 13:44 楼主
  1. static void TransparentBlt2(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest,
  2. HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, UINT crTransparent)
  3. {
  4. HDC hImageDC, hMaskDC;
  5. HBITMAP hOldImageBMP, hImageBMP, hOldMaskBMP, hMaskBMP;

  6. hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest);
  7. hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL);
  8. hImageDC = CreateCompatibleDC(hdcDest);
  9. hMaskDC = CreateCompatibleDC(hdcDest);
  10. hOldImageBMP = (HBITMAP) SelectObject(hImageDC, hImageBMP);
  11. hOldMaskBMP = (HBITMAP) SelectObject(hMaskDC, hMaskBMP);

  12. if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
  13. {
  14. BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest,
  15. hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);
  16. }
  17. else
  18. {
  19. StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest,
  20. hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY);
  21. }
  22. SetBkColor(hImageDC, crTransparent);
  23. BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY);
  24. SetBkColor(hImageDC, RGB(0,0,0));
  25. SetTextColor(hImageDC, RGB(255,255,255));
  26. BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);SetBkColor(hdcDest, RGB(255,255,255));
  27. SetTextColor(hdcDest, RGB(0,0,0));
  28. BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
  29. hMaskDC, 0, 0, SRCAND); // <-- 这一句在VC6下画出黑色的圆,在eVC下画出黑色的正方形。

  30. BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
  31. hImageDC, 0, 0, SRCPAINT); // <-- 这一句在VC6下画出棋子,在eVC下画出随机噪音。


  32. SelectObject(hImageDC, hOldImageBMP);
  33. DeleteDC(hImageDC);
  34. SelectObject(hMaskDC, hOldMaskBMP);
  35. DeleteDC(hMaskDC);
  36. DeleteObject(hImageBMP);
  37. DeleteObject(hMaskBMP);
  38. }


单步跟踪发现所有DC相关函数的返回值全为非零(成功)。
在网上搜索许久,找到的和我的问题最接近的帖子是:

http://bbs.tongji.net/thread-296414-1-1.html

但仍然不能解决我的问题。特请有经验的大虾指点一二。

[img=http://www.vbgood.com/attachments/month_0908/0908231331059c0055f4039699.jpg[/img]

回复评论 (7)

多DEBUG看看.
点赞  2009-8-23 15:43
有哪位好心人能给我一个eVC下正常显示位图的例子吗?没有这个,我的 DEBUG 根本无从下手啊~~~
点赞  2009-8-24 07:51
可能是资源泄露吧。。。
建议看看 汪兵的《EVC高级编程及其应用开发》
点赞  2009-8-24 09:04
OK,在
http://blog.eeworld.net/gniyliu/archive/2007/08/18/1749570.aspx
找到一个显示 bmp 的例子并已调试成功。今晚下班后回去改改,相信定能成功,嗯嗯。谢谢大家的关注。
点赞  2009-8-24 09:54
希望那个楼主能够解决,解决后冒个泡啊,呵呵
点赞  2009-8-24 21:01
根据我多次的观察,确实跟内存或资源泄漏有关,问题就是看不清关键在哪。
看来我还是重写画图函数好了,原来的画图代码全部不要,只是看懂它的思路。
点赞  2009-8-28 09:22
问题点数:50分 继续等待高手出现。。。
点赞  2009-8-28 09:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复