UpdateLayeredWindow 函数调用不行 没法半透明

UpdateLayeredWindow 函数调用不行 无法半透明
网上查资料 想通过 WS_EX_LAYERED + UpdateLayeredWindow 让窗口的白色客户区域 半透明

结果连个窗口的影子都看不到

下面是代码

C/C++ code


#include <windows.h>
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("HelloWin") ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"), 
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName,                  
                          TEXT ("The Hello Program"), 
                          WS_OVERLAPPEDWINDOW,//WS_POPUP|WS_SYSMENU|WS_MINIMIZEBOX, //         
                          100, 100, 800, 600,             
                          NULL,NULL,hInstance,NULL) ;                     
     
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;
     
     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
         case WM_CREATE:
             {
                //增加窗口样式
                int ii = SetWindowLong(hwnd,GWL_EXSTYLE,WS_EX_LAYERED);

                int e = GetLastError();

                BLENDFUNCTION  blend = {AC_SRC_OVER, 0, 200, AC_SRC_ALPHA};

                ii = UpdateLayeredWindow(hwnd, NULL, NULL, NULL, NULL, NULL, RGB(255,255,255), &blend, ULW_ALPHA);

                e = GetLastError();

             }return 0 ;

         case WM_DESTROY:
              PostQuitMessage (0) ;
              return 0 ;
     }

     return DefWindowProc (hwnd, message, wParam, lParam) ;
}



调用返回0 查错误 返回还是0

------解决方案--------------------
为什么不在创建窗口时就直接指定WS_EX_LAYERED样式,非要到窗口过程中用SetWindowLong?