您的位置:首页 > 其它

用SetLayeredWindowAttributes实现窗口透明

2009-04-03 15:42 369 查看
BOOL SetLayeredWindowAttributes(

HWND hwnd,

COLORREF crKey,

BYTE bAlpha,

DWORD dwFlags

);

hwnd是透明窗体的句柄,

crKey为颜色值,

bAlpha是透明度,取值范围是[0,255],

dwFlags是透明方式,可以取两个值:

当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;

当取值为LWA_COLORKEY时,Alpha参数有效而窗体中的所有颜色为crKey的地方将变为透明。

LWA_ALPHA = 0x2

LWA_COLORKEY=0x1

也可以取两个值的组合:LWA_ALPHA Or LWA_COLORKEY。这样crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。

要使使窗体拥有透明效果,首先要有用SetWindowLong设置WS_EX_LAYERED扩展属性

WS_EX_LAYERED = 0x80000

实例代码:

int main(int argc, char* argv[])
{
HWND hWnd = 0;
hWnd = FindWindowEx(hWnd, 0, "WindowClassName", NULL);

if (!hWnd)
{
printf("Not Find!");
}
SetWindowLong(hWnd,GWL_EXSTYLE,
GetWindowLong(hWnd,GWL_EXSTYLE)^0x80000);

HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)fun(hWnd,0,128,2);
FreeLibrary(hInst);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: