VC6.0使用SetLayeredWindowAttributes实现透明效果

来源:互联网 发布:iptv网络电视连接不上 编辑:程序博客网 时间:2024/05/16 15:31

1.首先在stdafx.h那里添加定义

#define LWA_COLORKEY 0x00000001

#define LWA_ALPHA 0x00000002

typedef BOOL (FAR WINAPI *LAYERFUNC)(HWND,COLORREF,BYTE,DWORD);


2.
添加函数
BOOL CXXDlg::SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags)
{
//要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性,方法可以在CreateWindowEx时指定,
//也可以SetWindowLong动态设置。如下代码可设置分层窗口:

LONG t = GetWindowLong(m_hWnd, GWL_EXSTYLE);
t |= WS_EX_LAYERED;
SetWindowLong(m_hWnd, GWL_EXSTYLE, t);

//以上代码也可以通过ModifyWindow函数添加 WS_EX_LAYERED属性。

LAYERFUNC SetLayer;
HMODULE hmod = LoadLibrary("user32.dll");
SetLayer=(LAYERFUNC)GetProcAddress(hmod,"SetLayeredWindowAttributes");
BOOL bReturn = SetLayer(hwnd,crKey,bAlpha,dwFlags);
FreeLibrary(hmod);
return bReturn;
}

3.
在OnInitDialog()里面调用函数,添加以下代码:
SetLayeredWindowAttributes(m_hWnd,0,230/*这里设置透明度*/, LWA_ALPHA);

完毕,
然后也可以通过这个函数设置不规则窗口。


0 0
原创粉丝点击