窗口半透明要使用哪个库?解决方案
窗口半透明要使用哪个库?
我想使一个窗口半透明,参照帮助文档使用扩展风格WS—EX—LAYERED,再设置属性,结果编译时提示风格未定义,设置属性函数未定义,等,是不是还要哪个库?
谢谢!
------解决方案--------------------
我想使一个窗口半透明,参照帮助文档使用扩展风格WS—EX—LAYERED,再设置属性,结果编译时提示风格未定义,设置属性函数未定义,等,是不是还要哪个库?
谢谢!
------解决方案--------------------
- C/C++ code
//===============================================================================================// //实现透明效果 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,40,2);//第三个参数是透明度,查SetLayeredWindowAttributes函数的使用说明 FreeLibrary(hInst); } //===============================================================================================// //===============================================================================================//
------解决方案--------------------
楼上的代码,是使用了未公开的api,这个可以用的。
但是最好做下系统判断,并不是所有系统都支持这么干的。
在支持的系统里面运行这段代码。
半透明你可以自己画啊。
在onpaint里面自己画
图像透明算法这样的:
假设有A,B两幅图,上各有a(r1,g1,b1),b(r2,g2,b2)两个点。B图在上,A图在下。如果要让B图半透明。
c : r = r1*T+r2*(1-T)
g = g1*T+g2*(1-T)
b = b1*T+b2*(1-T)
这个T是透明参数,0-1之间,自己试试看