窗口淡入淡出效果的实现

    技术2022-05-11  58

    1. 简介

    函数: SetLayeredWindowAttributes 

    HeaderDeclared in Winuser.h, include Windows.hImport libraryUser32.libMinimum operating systemsWindows 2000

    所以在98系统下,并不支持

    2. 属性

    现在我们直接通过DLL来调用,所以未包含头文件,可以直接使用值来操作.

    以下是头文件中的关键属性在winuser.h中的定义

    #define WS_EX_LAYERED          0x00080000#define LWA_COLORKEY            0x00000001#define LWA_ALPHA                     0x00000002

    要操作函数,必须要加上加入WS_EX_LAYERED扩展属性

    LONG lStyleEx =GetWindowLong(m_hWnd,GWL_EXSTYLE);

     SetWindowLong(m_hWnd,GWL_EXSTYLE,lStyleEx | 0x00080000);

    然后函数使用LWA_ALPHA属性

    3. 调用

      //nAlpha为通明度,0~255之间的任意数值,0表示完全透明,255不透明

      int nAlpha  = 200;

       //调用User32.DLL中的函数   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(m_hWnd,0,nAlpha  ,2);      FreeLibrary(hInst);    }

    弄个定时器,改变nAlpha值,就可以实现窗口的淡入淡出效果


    最新回复(0)