Сообщение 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, выглядит так:
_>Это разве не тоже самое или там какой-то особенный blur? )))
Разница в том, что раньше его не надо было рисовать самому ручками.
Если даже была потребность растянуть этот блур и на клиентскую область окна, то это указывалось через однократный вызов DwmExtendFrameIntoClientArea(hwnd, margins).
То бишь, DWM скрывал от юзверя низлежащий DirectX, бо обращение с низкоуровневой графикой всегда многословное, там несколько видов поверхностей, пайплайн местами не прост, форматов RGB дохрена и т.д. до бесконечности, т.е. в этой низкоуровневой механике легко допустить массу ошибок. Например, можно было подменить отображаемую поверхность экрану и выйти из приложения, забыв вернуть дефлотную и усё, только перезагрузка, бо все приложения пишут в активную поверхность, а та не установлена как отображаемая. Теперь винды чуть "поумнели", всё прекрасно вернут взад, то бишь изоляция стала получше.
Теперь можете развлекаться в DX, а там не только несчастный блур, а вообще что душе угодно. ))
_>а в той же 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, выглядит так:
_>Это разве не тоже самое или там какой-то особенный blur? )))
Разница в том, что раньше его не надо было рисовать самому ручками.
Если даже была потребность растянуть этот блур и на клиентскую область окна, то это указывалось через однократный вызов DwmExtendFrameIntoClientArea(hwnd, margins).
То бишь, DWM скрывал от юзверя низлежащий DirectX, бо обращение с низкоуровневой графикой всегда многословное, там несколько видов поверхностей, пайплайн местами не прост, форматов RGB дохрена и т.д. до бесконечности, т.е. в этой низкоуровневой механике легко допустить массу ошибок. Например, можно было подменить отображаемую поверхность экрану и выйти из приложения, забыв вернуть дефлотную и усё, только перезагрузка, бо все приложения пишут в активную поверхность, а та не установлена как отображаемая. Теперь винды чуть "поумнели", всё прекрасно вернут взад, то бишь изоляция стала получше.
Теперь можете развлекаться в DX, а там не только несчастный блур, а вообще что душе угодно. ))
_>а в той же 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, а там не только несчастный блур, а вообще что душе угодно. ))