Стиль окна CS_DROPSHADOW не работает

Я создал дочернее окно со стилем 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 ответ

Решение

Теперь я вижу это: 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 ".

Другие вопросы по тегам