Элементы управления 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 и выше поддерживают многоуровневые дочерние окна.

Другие вопросы по тегам