Я хотел бы создать приложение Direct2D с прозрачным фоном, на котором размещены несколько непрозрачных сложных элементов управления. Проблема может быть разбита на несколько подрешений:Direct2D: непрозрачные дочерние окна над прозрачным родительским окном
Архитектура: Должны ли элементы управления быть реализованы как дочерние окна? Я считаю, что это правильный подход, а именно создание многоугольников Direct2D, реализующих функциональность дочернего окна.
Я пытался осуществить это путем инициализации родительского окна:
SetWindowLong(m_hwnd, GWL_EXSTYLE, GetWindowLong(m_hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(m_hwnd, 0, (255 * 50)/100, LWA_ALPHA);
И создать дочернее окно, как WS_CHILD. Это привело к тому, что ребенок, на котором все дроны D2D, включая фон, прозрачен. Я не мог найти способ сделать ребенка непрозрачным. Когда я создаю дочернее окно как WS_POPUP или WS_OVERLAPPED проблема непрозрачности решена, но дочернее окно находится на рабочем столе, не имеющем отношения к родительскому объекту.
Многослойное окно? Я решил работать с многослойными окнами, но поскольку я нацелен на VistaSP2 и выше, могут быть лучшие решения. Я пробовал предлагаемое решение here, но я тоже не смог его реализовать.