当前位置:C++技术网 > 资讯 > SetLayeredWindowAttributes函数创建半透明窗口

SetLayeredWindowAttributes函数创建半透明窗口

更新时间:2015-10-28 22:44:25浏览次数:1+次

GetProcAddress函数与SetLayeredWindowAttributes函数

GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。

FARPROC GetProcAddress(
HMODULE hModule, // DLL模块句柄
LPCSTR lpProcName // 函数名
);
hModule
[in] 包含此函数的DLL模块的句柄。LoadLibrary、AfxLoadLibrary 或者GetModuleHandle函数可以返回此句柄。
lpProcName
[in] 包含函数名的以NULL结尾的字符串,或者指定函数的序数值。如果此参数是一个序数值,它必须在一个字的底字节,高字节必须为0。
返回值:
如果函数调用成功,返回值是DLL中的输出函数地址。

如果函数调用失败,返回值是NULL。得到进一步的错误信息,调用函数GetLastError。


SetLayeredWindowAttributes此函数用于设置分层窗口透明度,常和 UpdateLayeredWindow 函数结合使用。

BOOL SetLayeredWindowAttributes(
HWND hwnd, // 指定分层窗口句柄
COLORREF crKey, // 指定需要透明的背景颜色值,可用RGB()宏
BYTE bAlpha, // 设置透明度,0表示完全透明,255表示不透明
DWORD dwFlags // 透明方式
);
其中,dwFlags参数可取以下值:
LWA_ALPHA时:crKey参数无效,bAlpha参数有效;
LWA_COLORKEY:窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。其常量值为1。
LWA_ALPHA | LWA_COLORKEY:crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。
DWORD dwFlags: =1:仅颜色 col 透明, =2 :窗口按照bAlpha变量进行透明处理。
要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性,方法可以在CreateWindowEx时指定,也可以SetWindowLong动态设置。如下代码可设置分层窗口:
LONG t = GetWindowLong(m_hWnd, GWL_EXSTYLE);
t |= WS_EX_LAYERED;
SetWindowLong(m_hWnd, GWL_EXSTYLE, t);
此函数在VC6.0中没有声明,需要自定义后在user32.dll后动态获取地址后调用。在VC9.0(VS2008)及其之后版本中可以直接调用
动态调用user32.dll中的SetLayeredWindowAttributes函数:
typedef BOOL (FAR WINAPI *LAYERFUNC)(HWND,COLORREF,BYTE,DWORD);
BOOL SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags)
{
LAYERFUNC SetLayer;
HMODULE hmod = LoadLibrary("user32.dll");
SetLayer=(LAYERFUNC)GetProcAddress(hmod,"SetLayeredWindowAttributes");
BOOL bReturn = SetLayer(hwnd,crKey,bAlpha,dwFlags);
FreeLibrary(hmod);
return bReturn;
}
我还将写篇文章,实例讲解半透明窗口的创建,尽请关注!