首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

窗口半透明要使用哪个库?解决方案

2012-04-21 
窗口半透明要使用哪个库?我想使一个窗口半透明,参照帮助文档使用扩展风格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之间,自己试试看

热点排行