Стиль окна 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 ".