CS_DROPSHADOW窗口样式不起作用

时间:2013-02-11 13:03:52

标签: winapi window-style

我使用CS_DROPSHADOW样式创建子窗口,但不显示阴影 我试着打电话给SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID) TRUE, 0);,但也没有帮助 有人可以向我解释什么是错的吗?

    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;

1 个答案:

答案 0 :(得分: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,然后在它打开时将它定位在你想要的位置。

尽管如此: 因为WNDCLASSEX wcex而使用HWND PageWnd = CreateWindowEx而不是HWND CreateWindow;

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

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