发信人: wenbobo(没有GF的感觉象流浪) 
整理人: wenbobo(2002-07-10 16:43:27), 站内信件
 | 
 
 
之所以贴这篇文章,是因为我现在才发现原来我一直使用的方法,和大家讨论的
 完全不同:)
 
 浏览了精华区的两篇:
 ● C语言>>界面设计--------丹青妙手>>关于透明位图 
 ● C语言>>示例代码--------妙手天成>>一个可以绘制透明图象的函数 
 
 
 看这两篇可以了解“透明”位图的绘制原理。但我在这里讲的是应用。有一个现成
 函数,TransparentBlt,可以完成我们的需要,这是大家都想望的。真的它存在,
 在MSIMG32.DLL里面。
 
 根据MSDN资料,使用限制是:
 Windows NT: Requires version 5.0 or later.
 Windows: Requires Windows 98 or later
 
 但是根据我的经验,只要安装有IE4,就可以用。
 
 函数原型是:
 BOOL TransparentBlt(
   HDC hdcDest,
   int nXOriginDest,
   int nYOriginDest,
   int nWidthDest,
   int hHeightDest,
   HDC hdcSrc,
   int nXOriginSrc,
   int nYOriginSrc,
   int nWidthSrc,
   int nHeightSrc,
   UINT crTransparent
 );
  
 
 如果你在你的Include目录中找不到(gcc里面就有这个问题),可以这样:
 
 
 HINSTANCE hMsImg32;
 BOOL (WINAPI * TransparentBlt)(HDC,int,int,int,int,HDC,int,int,int,int,UINT);
 //---------------------------------------------------------------------------
 BOOL MsImg32Startup()
 {
     hMsImg32 = LoadLibrary( "MSIMG32.DLL" );
     if ( hMsImg32 )
     {
         TransparentBlt = GetProcAddress( hMsImg32, "TransparentBlt" );
         return (BOOL)TransparentBlt;
     }
     return 0;
 }
 //---------------------------------------------------------------------------
 BOOL MsImg32Clear()
 {
     if ( FreeLibrary( hMsImg32 ) )
     {
         hMsImg32 = NULL;
         return TRUE;
     }
     return FALSE;
 }
 
 我不知道它是如何编写的,但是测试结果表明,这个函数的速度要比一般的BitBlt
 实现的要快很多。考虑到现在用原始Windows95的人已经绝迹了,大家可以放心的用。
 
 
  ---- http://screensaver.coc.cc
 原创屏保,原汁原味,每一个小程序凝聚着主人的独特构思。
 
       | 
 
 
 |