+ -
当前位置:首页 → 问答吧 → 窗口半透明要使用哪个库?

窗口半透明要使用哪个库?

时间:2011-12-02

来源:互联网

我想使一个窗口半透明,参照帮助文档使用扩展风格WS—EX—LAYERED,再设置属性,结果编译时提示风格未定义,设置属性函数未定义,等,是不是还要哪个库?
谢谢!

作者: Renyq   发布时间: 2011-12-02

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);  
    }

    //===============================================================================================//
    //===============================================================================================//

作者: et214721856   发布时间: 2011-12-02

楼上的代码不是直接API的吧?
我先前看过Delphi的实现代码,也可以做出效果的,但我现在想要直接写API的那种:
VS2005 C++ Windows编程类型。
谢谢!

作者: Renyq   发布时间: 2011-12-06

引用 2 楼 renyq 的回复:

楼上的代码不是直接API的吧?
我先前看过Delphi的实现代码,也可以做出效果的,但我现在想要直接写API的那种:
VS2005 C++ Windows编程类型。
谢谢!

User32.dll

是api来的,windows系统的。

作者: et214721856   发布时间: 2011-12-06

楼上的代码,是使用了未公开的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之间,自己试试看

作者: shyandsy   发布时间: 2011-12-14

热门下载

更多