苏州集团网站建设,网站开发子孙账号,网站建设企业模板哪家好,wordpress 一小时建站如何制作透明窗体 #xff1f;#xff1f;#xff1f;#xff1f;#xff1f; 使用SetLayeredWindowAttributes可以方便的制作透明窗体#xff0c;此函数在w2k以上才支持,而且如果希望直接使用的话#xff0c;可能需要下载最新的SDK。不过此函数在w2k的user32.dll里有实…如何制作透明窗体 使用SetLayeredWindowAttributes可以方便的制作透明窗体此函数在w2k以上才支持,而且如果希望直接使用的话可能需要下载最新的SDK。不过此函数在w2k的user32.dll里有实现所以如果你不希望下载巨大的sdk的话可以直接使用GetProcAddress获取该函数的指针。
SetLayeredWindowAttributes的函数原型如下
BOOL SetLayeredWindowAttributes
(
HWND hwnd, // handle to the layered window
COLORREF crKey, // specifies the color key
BYTE bAlpha, // value for the blend function
DWORD dwFlags // action
);
Windows NT/2000/XP: Included in Windows 2000 and later. Windows 95/98/Me: Unsupported.注意了在win9x里没法使用的 Header: Declared in Winuser.h; include Windows.h. Library: Use User32.lib.
一些常量:
WS_EX_LAYERED 0x80000; LWA_ALPHA 0x2; LWA_COLORKEY0x1; 其中dwFlags有LWA_ALPHA和LWA_COLORKEY LWA_ALPHA被设置的话,通过bAlpha决定透明度. LWA_COLORKEY被设置的话,则指定被透明掉的颜色为crKey,其他颜色则正常显示. 要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性(旧的sdk没有定义这个属性,所以可以直接指定为0x80000). 例子代码: 在OnInitDialog()加入:
//加入WS_EX_LAYERED扩展属性
SetWindowLong(this-GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(this-GetSafeHwnd(),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(this-GetSafeHwnd(),0,128,2);
FreeLibrary(hInst); } 稍加修改还可以作出淡出淡入的效果. 注意第三个参数(128)不要取得太小了,为0的话就完全透明,看不到了。