精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>图形图像及多媒体专题>>再论透明位图 -- 对精华区“透明位图”讨论的补充

主题:再论透明位图 -- 对精华区“透明位图”讨论的补充
发信人: 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
原创屏保,原汁原味,每一个小程序凝聚着主人的独特构思。


     

[关闭][返回]