按照MSDN上的介绍,该函数的作用是更新一个layered 窗口的位置、大小、形状、内容和透明度。现在建立一个对话框程序,在OnInitDialog()中添加如下代码:
         BLENDFUNCTION blend;
blend.BlendOp = AC_SRC_OVER;
blend.BlendFlags = 0;
blend.AlphaFormat = 0;
blend.SourceConstantAlpha =100; ::UpdateLayeredWindow(
                m_hWnd     //本窗口句柄
                , GetDC(m_hwnd)      
                , NULL     //保持当前窗口未知不变
                , NULL     //保持当前窗口大小不变 
                , NULL     
                , NULL
                , NULL    
                , &blend
                , ULW_ALPHA);
为什么对话框不会自动透明到alpha值为100?上述代码目的只是简单的把窗口设为半透明,为什么看不到界面?当然把窗口设为半透明也可以简单的用
SetLayeredWindowAttributes(m_hwnd, 0, (255 * 70) / 100, LWA_ALPHA);
但是为了验证
UpdateLayeredWindow的作用所以上述代码特意用UpdateLayeredWindow来设置窗口的透明度。
     为什么看不到界面?

解决方案 »

  1.   

    BOOL SetLayeredWindowAttributes(          HWND hwnd,
        COLORREF crKey,
        BYTE bAlpha,
        DWORD dwFlags
    );
      

  2.   

    看清楚UpdateLayeredWindow的参数啊,你用得不对
      

  3.   

    to Super_Huai(坏坏):那里不对?望指出。
      

  4.   

    1.如果你是用CreateWindow创建的窗体,你在程序初始化时调用下面的代码
    DWORD dwExStyle=GetWindowLong(hwnd,GWL_EXSTYLE);
    if((dwExStyle&0x80000)!=0x80000)
        SetWindowLong(hwnd ,GWL_EXSTYLE,dwExStyle^0x80000);2.如果你是用CreateWindowEx创建的窗体
    dwExStyle定义成WS_EX_LAYERED