Элементы управления win32 (QWinHost) не отображаются на многоуровневом (т.е. полупрозрачном) виджете (WS_EX_LAYERED)
Я портировал элемент управления win32 с помощью QWinHost и поместил его в многоуровневый (полупрозрачный) виджет. Когда я устанавливал флаг WS_EX_LAYERED, тогда рисование не происходило для портированного управления win32.
SetWindowLong(winId(),
GWL_EXSTYLE,
GetWindowLong(winId(), GWL_EXSTYLE) | *WS_EX_LAYERED*);
1 ответ
Решение
Вы должны сказать Windows, как рисовать многослойное окно. MSDN говорит, что есть два пути; Вы почти наверняка хотите SetLayeredWindowAttributes, так как вы не хотите изменять код рисования элемента управления.
Так после
SetWindowLong(winId(),
GWL_EXSTYLE,
GetWindowLong(winId(), GWL_EXSTYLE) | WS_EX_LAYERED);
добавлять
SetLayeredWindowAttributes(winId(), RGB(0,0,0), bAlpha, LWA_ALPHA);
(С учетом, конечно, для ваших нужд).
Обратите внимание, что многослойное окно должно быть окном верхнего уровня в Windows 7 ниже; только Windows 8 и выше поддерживают многоуровневые дочерние окна.