Информация об изменениях

Сообщение Re[6]: [Windows] GDI - всё. от 19.06.2018 18:35

Изменено 19.06.2018 19:19 vdimas

Re[6]: [Windows] GDI - всё.
Здравствуйте, alex_public, Вы писали:

_>а в той же Qt уже просто одной функцией http://doc.qt.io/qt-5/qtwin.html#enableBlurBehindWindow


DWM не работает в новых виндах.
Я одно время с ним серьёзно играл, кароч, оно "работает", т.е. никаких ошибок при инициализации и установки (довольно-таки нетривиальной!) св-в не выдаёт, т.е. все результаты соответствуют тому, что композиция якобы включена.

Но DwmDefWindowProc ничего не делает, то бишь, всегда возвращает FALSE, т.е. отрисовка NC-областей выполняется через стандартную DefWindowProc.

В двух словах, процедура окна, использующего DWM, выглядит так:
...
{
    LRESULT dwmResult;

    if(DwmDefWindowProc(hwnd, msg, wParam, lParam, &dwmResult))
        return dwmResult;
}
...
switch(msg) 
{
...
default:
    return DefWindowProc(hwnd, msg, wParam, lParam);
}



_>Это разве не тоже самое или там какой-то особенный blur? )))


Разница в том, что раньше его не надо было рисовать самому ручками.
Если даже была потребность растянуть этот блур и на клиентскую область окна, то это указывалось через однократный вызов DwmExtendFrameIntoClientArea(hwnd, margins).

То бишь, DWM скрывал от юзверя низлежащий DirectX, бо обращение с низкоуровневой графикой всегда многословное, там несколько видов поверхностей, пайплайн местами не прост, форматов RGB дохрена и т.д. до бесконечности, т.е. в этой низкоуровневой механике легко допустить массу ошибок. Например, можно было подменить отображаемую поверхность экрану и выйти из приложения, забыв вернуть дефлотную и усё, только перезагрузка, бо все приложения пишут в активную поверхность, а та не установлена как отображаемая. Теперь винды чуть "поумнели", всё прекрасно вернут взад, то бишь изоляция стала получше.

Теперь можете развлекаться в DX, а там не только несчастный блур, а вообще что душе угодно. ))
Re[6]: [Windows] GDI - всё.
Здравствуйте, alex_public, Вы писали:

_>а в той же Qt уже просто одной функцией http://doc.qt.io/qt-5/qtwin.html#enableBlurBehindWindow


DWM не работает в новых виндах.
Я одно время с ним серьёзно играл, кароч, оно "работает", т.е. никаких ошибок при инициализации и установке (довольно-таки нетривиальной!) св-в не выдаёт, т.е. все результаты соответствуют тому, что композиция якобы включена.

Но DwmDefWindowProc ничего не делает, то бишь, всегда возвращает FALSE, т.е. отрисовка NC-областей выполняется через стандартную DefWindowProc.

В двух словах, процедура окна, использующего DWM, выглядит так:
...
{
    LRESULT dwmResult;

    if(DwmDefWindowProc(hwnd, msg, wParam, lParam, &dwmResult))
        return dwmResult;
}
...
switch(msg) 
{
...
default:
    return DefWindowProc(hwnd, msg, wParam, lParam);
}



_>Это разве не тоже самое или там какой-то особенный blur? )))


Разница в том, что раньше его не надо было рисовать самому ручками.
Если даже была потребность растянуть этот блур и на клиентскую область окна, то это указывалось через однократный вызов DwmExtendFrameIntoClientArea(hwnd, margins).

То бишь, DWM скрывал от юзверя низлежащий DirectX, бо обращение с низкоуровневой графикой всегда многословное, там несколько видов поверхностей, пайплайн местами не прост, форматов RGB дохрена и т.д. до бесконечности, т.е. в этой низкоуровневой механике легко допустить массу ошибок. Например, можно было подменить отображаемую поверхность экрану и выйти из приложения, забыв вернуть дефлотную и усё, только перезагрузка, бо все приложения пишут в активную поверхность, а та не установлена как отображаемая. Теперь винды чуть "поумнели", всё прекрасно вернут взад, то бишь изоляция стала получше.

Теперь можете развлекаться в DX, а там не только несчастный блур, а вообще что душе угодно. ))