diff options
Diffstat (limited to 'src/winextras/qwinfunctions_p.h')
-rw-r--r-- | src/winextras/qwinfunctions_p.h | 94 |
1 files changed, 15 insertions, 79 deletions
diff --git a/src/winextras/qwinfunctions_p.h b/src/winextras/qwinfunctions_p.h index 9f00e4c..6ea1598 100644 --- a/src/winextras/qwinfunctions_p.h +++ b/src/winextras/qwinfunctions_p.h @@ -54,74 +54,25 @@ #include <QString> #include <qt_windows.h> #include <uxtheme.h> +#include <dwmapi.h> QT_BEGIN_NAMESPACE -enum qt_DWMWINDOWATTRIBUTE +enum qt_DWMWINDOWATTRIBUTE // Not present in MinGW 4.9 { - qt_DWMWA_NCRENDERING_ENABLED = 1, - qt_DWMWA_NCRENDERING_POLICY, - qt_DWMWA_TRANSITIONS_FORCEDISABLED, - qt_DWMWA_ALLOW_NCPAINT, - qt_DWMWA_CAPTION_BUTTON_BOUNDS, - qt_DWMWA_NONCLIENT_RTL_LAYOUT, - qt_DWMWA_FORCE_ICONIC_REPRESENTATION, - qt_DWMWA_FLIP3D_POLICY, - qt_DWMWA_EXTENDED_FRAME_BOUNDS, - qt_DWMWA_HAS_ICONIC_BITMAP, - qt_DWMWA_DISALLOW_PEEK, - qt_DWMWA_EXCLUDED_FROM_PEEK, - qt_DWMWA_CLOAK, - qt_DWMWA_CLOAKED, - qt_DWMWA_FREEZE_REPRESENTATION, - qt_DWMWA_LAST + qt_DWMWA_DISALLOW_PEEK = 11, + qt_DWMWA_EXCLUDED_FROM_PEEK = 12, }; -enum qt_DWMFLIP3DWINDOWPOLICY { - qt_DWMFLIP3D_DEFAULT, - qt_DWMFLIP3D_EXCLUDEBELOW, - qt_DWMFLIP3D_EXCLUDEABOVE, - qt_DWMFLIP3D_LAST -}; - -#include <pshpack1.h> - -struct qt_DWM_BLURBEHIND { - DWORD dwFlags; - BOOL fEnable; - HRGN hRgnBlur; - BOOL fTransitionOnMaximized; -}; - -#include <poppack.h> - -const int qt_DWM_BB_ENABLE = 0x00000001; -const int qt_DWM_BB_BLURREGION = 0x00000002; -const int qt_DWM_BB_TRANSITIONONMAXIMIZED = 0x00000004; - struct QtDwmApiDll { - typedef HRESULT (STDAPICALLTYPE *DwmGetColorizationColor)(DWORD *, BOOL *); - typedef HRESULT (STDAPICALLTYPE *DwmSetWindowAttribute)(HWND, DWORD, LPCVOID, DWORD); - typedef HRESULT (STDAPICALLTYPE *DwmGetWindowAttribute)(HWND, DWORD, PVOID, DWORD); - typedef HRESULT (STDAPICALLTYPE *DwmExtendFrameIntoClientArea)(HWND, const MARGINS *); - typedef HRESULT (STDAPICALLTYPE *DwmEnableBlurBehindWindow)(HWND, const qt_DWM_BLURBEHIND *); - typedef HRESULT (STDAPICALLTYPE *DwmIsCompositionEnabled)(BOOL *); - typedef HRESULT (STDAPICALLTYPE *DwmEnableComposition)(UINT); - typedef HRESULT (STDAPICALLTYPE *DwmSetIconicThumbnail)(HWND, HBITMAP, DWORD); + typedef HRESULT (STDAPICALLTYPE *DwmSetIconicThumbnail)(HWND, HBITMAP, DWORD); // Windows 7 typedef HRESULT (STDAPICALLTYPE *DwmSetIconicLivePreviewBitmap)(HWND, HBITMAP, POINT *, DWORD); typedef HRESULT (STDAPICALLTYPE *DwmInvalidateIconicBitmaps)(HWND); - QtDwmApiDll() - : dwmGetColorizationColor(0), dwmSetWindowAttribute(0), dwmGetWindowAttribute(0) - , dwmExtendFrameIntoClientArea(0), dwmEnableBlurBehindWindow(0) - , dwmIsCompositionEnabled(0), dwmEnableComposition(0) - , dwmSetIconicThumbnail(0), dwmSetIconicLivePreviewBitmap(0), dwmInvalidateIconicBitmaps(0) - {} - void init() { - if (!dwmSetWindowAttribute && QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA) + if (!dwmSetIconicThumbnail) resolve(); } @@ -136,36 +87,24 @@ struct QtDwmApiDll static void setBooleanWindowAttribute(HWND hwnd, DWORD attribute, bool value) { setWindowAttribute<BOOL>(hwnd, attribute, BOOL(value ? TRUE : FALSE)); } - DwmGetColorizationColor dwmGetColorizationColor; - DwmSetWindowAttribute dwmSetWindowAttribute; - DwmGetWindowAttribute dwmGetWindowAttribute; - DwmExtendFrameIntoClientArea dwmExtendFrameIntoClientArea; - DwmEnableBlurBehindWindow dwmEnableBlurBehindWindow; - DwmIsCompositionEnabled dwmIsCompositionEnabled; - DwmEnableComposition dwmEnableComposition; - DwmSetIconicThumbnail dwmSetIconicThumbnail; - DwmSetIconicLivePreviewBitmap dwmSetIconicLivePreviewBitmap; - DwmInvalidateIconicBitmaps dwmInvalidateIconicBitmaps; + DwmSetIconicThumbnail dwmSetIconicThumbnail = nullptr; + DwmSetIconicLivePreviewBitmap dwmSetIconicLivePreviewBitmap = nullptr; + DwmInvalidateIconicBitmaps dwmInvalidateIconicBitmaps = nullptr; }; struct QtShell32Dll - { - typedef HRESULT (STDAPICALLTYPE *SHCreateItemFromParsingName)(PCWSTR, IBindCtx *, REFIID, void **); typedef HRESULT (STDAPICALLTYPE *SetCurrentProcessExplicitAppUserModelID)(PCWSTR); - QtShell32Dll() : sHCreateItemFromParsingName(0), setCurrentProcessExplicitAppUserModelID(0) {} - void init() { - if (!sHCreateItemFromParsingName && QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA) + if (!setCurrentProcessExplicitAppUserModelID) resolve(); } void resolve(); - SHCreateItemFromParsingName sHCreateItemFromParsingName; // Vista - SetCurrentProcessExplicitAppUserModelID setCurrentProcessExplicitAppUserModelID; // Windows 7 + SetCurrentProcessExplicitAppUserModelID setCurrentProcessExplicitAppUserModelID = nullptr; // Windows 7 }; extern QtDwmApiDll qtDwmApiDll; @@ -186,19 +125,16 @@ inline wchar_t *qt_qstringToNullTerminated(const QString &src) template <class T> T QtDwmApiDll::windowAttribute(HWND hwnd, DWORD attribute, T defaultValue) { - qtDwmApiDll.init(); - T value = defaultValue; - if (qtDwmApiDll.dwmGetWindowAttribute) - qtDwmApiDll.dwmGetWindowAttribute(hwnd, attribute, &value, sizeof(value)); + T value; + if (FAILED(DwmGetWindowAttribute(hwnd, attribute, &value, sizeof(value)))) + value = defaultValue; return value; } template <class T> void QtDwmApiDll::setWindowAttribute(HWND hwnd, DWORD attribute, T value) { - qtDwmApiDll.init(); - if (qtDwmApiDll.dwmSetWindowAttribute) - qtDwmApiDll.dwmSetWindowAttribute(hwnd, attribute, &value, sizeof(value)); + DwmSetWindowAttribute(hwnd, attribute, &value, sizeof(value)); } QT_END_NAMESPACE |