我使用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;
答案 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函数相同。“