发信人: 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
原创屏保,原汁原味,每一个小程序凝聚着主人的独特构思。
|
|