2013-02-11 119 views
1

我使用CS_DROPSHADOW风格创建子窗口,但不显示阴影。
我试图拨打SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID) TRUE, 0);,但它也没有帮助。
有人可以向我解释什么是错的?CS_DROPSHADOW窗口风格不起作用

WNDCLASSEX wcex; 

    HBRUSH bgBrush = CreateSolidBrush(RGB(171,181,201)); 

    wcex.cbSize = sizeof(WNDCLASSEX); 
    wcex.style   = CS_DBLCLKS; 
    wcex.lpfnWndProc = KolmusProc; 
    wcex.cbClsExtra  = 0; 
    wcex.cbWndExtra  = 0; 
    wcex.hInstance  = hInstance; 
    wcex.hIcon   = LoadIconW(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); 
    wcex.hCursor  = LoadCursor(NULL, IDC_ARROW); 
    wcex.hbrBackground = bgBrush; 
    wcex.lpszMenuName = NULL; 
    wcex.lpszClassName = L"Kolmus"; 
    wcex.hIconSm  = LoadIconW(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); 

    RegisterClassEx(&wcex); 

    wcex.style   = CS_DROPSHADOW; 
    wcex.lpfnWndProc = PageProc; 
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
    wcex.lpszClassName = L"Page"; 

    RegisterClassEx(&wcex); 

    HWND hWnd = CreateWindow(L"Kolmus", L"Kolmus", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
     CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); 

    HWND PageWnd = CreateWindow(L"Page", L"", WS_CHILD | WS_VISIBLE, 30, 30, 200, 200, hWnd, NULL, hInstance, NULL); 

    MSG msg; 
    while (GetMessage(&msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    return (int)msg.wParam; 
+3

您根本无法在子窗口上获得投影,请勿尝试。 – 2013-02-11 13:46:44

+0

可以创建一个不是子窗口的窗口,并且它的位置将根据另一个窗口来确定? (作为子窗口,其位置关于父母确定)。 – user1544067 2013-02-11 14:46:54

回答

3

现在我看到它:I creating a child window ...

MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx

WS_CHILD防止CS_DROPSHADOW 如果你希望做一个临时的弹出控制在自己的窗口,并希望使用CS_DROPSHADOW加强弹出窗口的流畅性质,您不能将它与WS_CHILD一起使用 - 它只会忽略CS_DROPSHADOW。您需要将您的控件设置为WS_POPUP,然后在打开时将其放在您想要的位置。

然而: 使用相当HWND PageWnd = CreateWindowEx而不是HWND CreateWindow因为WNDCLASSEX wcex;

它很简单:WNDCLASS与CreateWindow一起使用,WNDCLASSEX与CreateWindowEx一起使用。

来自MSDN: “CreateWindowEx函数创建具有扩展窗口样式的重叠窗口,弹出窗口或子窗口;否则,此功能与CreateWindow功能相同。“

+3

使用WNDCLASS或WNDCLASSEX需要分别使用RegisterClass()或RegisterClassEx()。它没有使用'CreateWindow()'或'CreateWindowEx()'的意思,这两个只有在指定扩展样式的可能性上有所不同。 – mity 2013-02-11 13:45:29