我用CreateEx(WS_EX_TRANSPARENT,ALINE_CLASSNAME, _T(""), dwStyle, rect, pParentWnd, nID);函数想创建一个透明的窗体,但在运行时发现,此窗体是灰色的背景,没有透明,但是当我把窗体最大化时,窗体就透明了,我想这可能是因为我有些方面没有考虑到,还望高手指点

解决方案 »

  1.   

    好像把WNDCLASS结果bkBrush设置为NULL就可以实现窗口透明了。SDK里我试过的。MFC还正不知道怎么搞。
      

  2.   


    假设要透明的是一个对话框1.在主文件的顶部#define _WIN32_WINNT 0x5000否则,WS_EX_LAYERED未定义2.在WM_INITDIALOG里:
    设置风格为WS_EX_LAYEREDSetWindowLong(hWnd,GWL_EXSTYLE,GetWindowLong(hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);
    3.调用SetLayeredWindowAttributes函数
    SetLayeredWindowAttributes(hWnd, 0, (255 * 70) / 100, LWA_ALPHA);
      

  3.   

    csdn_viking:(thanks)
    请问对于透明窗体的背景刷新。我想实现流动的线条的效果,但是不知怎样将原来的线条刷新?
      

  4.   

    使用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_COLORKEY=0x1;   其中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的话就完全透明,看不到了。