Я пытаюсь получить полупрозрачное окно с Win32 API и C ++. Несмотря на то, что около миллиона результатов пытаются ответить на этот вопрос, ни один из них, похоже, не сработал для моего случая.
У меня есть собственное окно Win32 с размещенным в нем содержимым WPF. Поскольку я пытаюсь создать собственную оконную раму (и это тоже работает), я хочу, чтобы верхняя часть нарисованной рамки была полупрозрачной, возможно также применяя acryli c blur.
Глядя на WPF, я могу заархивировать свою цель, используя AllowTransparency = True
в окне и с прозрачным фоном. Теперь мне нужен способ для репликации этого поведения с Win32 API.
Технически, я могу сделать все главное окно прозрачным (поскольку главное окно полностью является фреймом, а размещенный в WPF контент является клиентской областью), но даже это не сработало (без прозрачности).
Для справки, вот как я создаю свое окно:
WNDCLASSEXW window_class_ex = {
sizeof(WNDCLASSEXW),
CS_HREDRAW | CS_VREDRAW,
window_callback,
0,
0,
application_instance,
nullptr,
LoadCursorW(nullptr, IDC_ARROW),
CreateSolidBrush(RGB(0, 0, 0)),
nullptr,
window_class,
nullptr
};
const HWND window_handle = CreateWindowExW(
0,
window_class,
L"WinSoup",
WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_EX_LAYERED,
CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
nullptr,
nullptr,
application_instance,
reinterpret_cast<LPVOID>(owner)
);
Я видел, что я должен использовать WS_EX_LAYERED
Но и это не дало желаемого эффекта. Конечно, сам контент WPF не должен быть прозрачным!