From 8367331278236ca2bc370c53b0404990946efafe Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <2546789017@qq.com> Date: Sun, 5 Sep 2021 13:24:12 +0800 Subject: [PATCH] Win32: move all win32 staff to one header Signed-off-by: Yuhang Zhao <2546789017@qq.com> --- CMakeLists.txt | 11 +--- examples/common.pri | 5 -- framelesshelper_win32.cpp | 41 +------------ framelesshelper_windows.h | 122 ++++++++++++++++++++++++++++++++++++++ lib.pro | 11 +--- utilities_win32.cpp | 42 +------------ 6 files changed, 128 insertions(+), 104 deletions(-) create mode 100644 framelesshelper_windows.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b2cd9cd..bd0805f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,7 @@ endif() if(WIN32) list(APPEND SOURCES + framelesshelper_windows.h utilities_win32.cpp framelesshelper_win32.h framelesshelper_win32.cpp @@ -119,16 +120,6 @@ if(TEST_UNIX) endif() if(WIN32) - set(NTDDI_WIN10_19H1 0x0A000007) - target_compile_definitions(${PROJECT_NAME} PRIVATE - WIN32_LEAN_AND_MEAN - _CRT_SECURE_NO_WARNINGS - UNICODE - _UNICODE - WINVER=${NTDDI_WIN10_19H1} - _WIN32_WINNT=${NTDDI_WIN10_19H1} - ) - unset(NTDDI_WIN10_19H1) target_link_libraries(${PROJECT_NAME} PRIVATE dwmapi ) diff --git a/examples/common.pri b/examples/common.pri index 0922c57..cb270c4 100644 --- a/examples/common.pri +++ b/examples/common.pri @@ -8,11 +8,6 @@ DEFINES += \ QT_DISABLE_DEPRECATED_BEFORE=0x060100 RESOURCES += $$PWD/images.qrc win32 { - DEFINES += \ - WIN32_LEAN_AND_MEAN \ - _CRT_SECURE_NO_WARNINGS \ - UNICODE \ - _UNICODE CONFIG += windeployqt CONFIG -= embed_manifest_exe LIBS += -luser32 -lshell32 -ldwmapi diff --git a/framelesshelper_win32.cpp b/framelesshelper_win32.cpp index b00b60f..1b5d329 100644 --- a/framelesshelper_win32.cpp +++ b/framelesshelper_win32.cpp @@ -26,51 +26,12 @@ #include #include #include -#include #include -#include #include "utilities.h" - -#ifndef WM_NCUAHDRAWCAPTION -// Not documented, only available since Windows Vista -#define WM_NCUAHDRAWCAPTION (0x00AE) -#endif - -#ifndef WM_NCUAHDRAWFRAME -// Not documented, only available since Windows Vista -#define WM_NCUAHDRAWFRAME (0x00AF) -#endif - -#ifndef ABM_GETAUTOHIDEBAREX -// Only available since Windows 8.1 -#define ABM_GETAUTOHIDEBAREX (0x0000000b) -#endif - -#ifndef IsMinimized -// Only available since Windows 2000 -#define IsMinimized(window) (IsIconic(window) != FALSE) -#endif - -#ifndef IsMaximized -// Only available since Windows 2000 -#define IsMaximized(window) (IsZoomed(window) != FALSE) -#endif - -#ifndef GET_X_LPARAM -// Only available since Windows 2000 -#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) -#endif - -#ifndef GET_Y_LPARAM -// Only available since Windows 2000 -#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) -#endif +#include "framelesshelper_windows.h" FRAMELESSHELPER_BEGIN_NAMESPACE -// The thickness of an auto-hide taskbar in pixels. -static constexpr int kAutoHideTaskbarThickness = 2; - [[nodiscard]] static inline bool shouldHaveWindowFrame() { if (Utilities::shouldUseNativeTitleBar()) { diff --git a/framelesshelper_windows.h b/framelesshelper_windows.h new file mode 100644 index 0000000..60ea894 --- /dev/null +++ b/framelesshelper_windows.h @@ -0,0 +1,122 @@ +/* + * MIT License + * + * Copyright (C) 2021 by wangwenx190 (Yuhang Zhao) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#ifndef UNICODE +#define UNICODE +#endif + +#ifndef _UNICODE +#define _UNICODE +#endif + +#ifndef _CRT_NON_CONFORMING_SWPRINTFS +#define _CRT_NON_CONFORMING_SWPRINTFS +#endif + +#ifndef _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_WARNINGS +#endif + +#ifndef NOMINMAX +#define NOMINMAX +#endif + +#include + +#ifndef NTDDI_WIN10_19H1 +#define NTDDI_WIN10_19H1 (0x0A000007) +#endif + +#ifdef WINVER +#undef WINVER +#endif + +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif + +#define WINVER NTDDI_WIN10_19H1 +#define _WIN32_WINNT NTDDI_WIN10_19H1 + +#include +#include +#include + +#ifndef WM_NCUAHDRAWCAPTION +#define WM_NCUAHDRAWCAPTION (0x00AE) +#endif + +#ifndef WM_NCUAHDRAWFRAME +#define WM_NCUAHDRAWFRAME (0x00AF) +#endif + +#ifndef WM_DWMCOLORIZATIONCOLORCHANGED +#define WM_DWMCOLORIZATIONCOLORCHANGED (0x0320) +#endif + +#ifndef SM_CXPADDEDBORDER +#define SM_CXPADDEDBORDER (92) +#endif + +#ifndef ABM_GETAUTOHIDEBAREX +#define ABM_GETAUTOHIDEBAREX (0x0000000b) +#endif + +#ifndef GET_X_LPARAM +#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) +#endif + +#ifndef GET_Y_LPARAM +#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) +#endif + +#ifndef IsMinimized +#define IsMinimized(window) (IsIconic(window) != FALSE) +#endif + +#ifndef IsMaximized +#define IsMaximized(window) (IsZoomed(window) != FALSE) +#endif + +constexpr int kAutoHideTaskbarThickness = 2; // The thickness of an auto-hide taskbar in pixels + +constexpr char kDwmRegistryKey[] = R"(HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM)"; +constexpr char kPersonalizeRegistryKey[] = R"(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize)"; + +constexpr int kDefaultResizeBorderThicknessClassic = 4; +constexpr int kDefaultResizeBorderThicknessAero = 8; +constexpr int kDefaultCaptionHeight = 23; + +enum : WORD +{ + _DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19, + _DWMWA_USE_IMMERSIVE_DARK_MODE = 20, + _DWMWA_VISIBLE_FRAME_BORDER_THICKNESS = 37 +}; diff --git a/lib.pro b/lib.pro index 98910b7..7030e3d 100644 --- a/lib.pro +++ b/lib.pro @@ -26,14 +26,9 @@ qtHaveModule(quick) { SOURCES += framelessquickhelper.cpp } win32 { - DEFINES += \ - WIN32_LEAN_AND_MEAN \ - _CRT_SECURE_NO_WARNINGS \ - UNICODE \ - _UNICODE \ - WINVER=0x0A000007 \ - _WIN32_WINNT=0x0A000007 - HEADERS += framelesshelper_win32.h + HEADERS += \ + framelesshelper_windows.h \ + framelesshelper_win32.h SOURCES += \ utilities_win32.cpp \ framelesshelper_win32.cpp diff --git a/utilities_win32.cpp b/utilities_win32.cpp index d5146f1..9d2d9d7 100644 --- a/utilities_win32.cpp +++ b/utilities_win32.cpp @@ -25,7 +25,6 @@ #include "utilities.h" #include #include -#include #if (QT_VERSION >= QT_VERSION_CHECK(5, 9, 0)) #include #else @@ -38,51 +37,12 @@ #else #include #endif -#include +#include "framelesshelper_windows.h" Q_DECLARE_METATYPE(QMargins) -#ifndef GET_X_LPARAM -// Only available since Windows 2000 -#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) -#endif - -#ifndef GET_Y_LPARAM -// Only available since Windows 2000 -#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) -#endif - -#ifndef IsMaximized -// Only available since Windows 2000 -#define IsMaximized(window) (IsZoomed(window) != FALSE) -#endif - -#ifndef SM_CXPADDEDBORDER -// Only available since Windows Vista -#define SM_CXPADDEDBORDER (92) -#endif - -#ifndef WM_DWMCOLORIZATIONCOLORCHANGED -// Only available since Windows Vista -#define WM_DWMCOLORIZATIONCOLORCHANGED (0x0320) -#endif - FRAMELESSHELPER_BEGIN_NAMESPACE -static constexpr char kDwmRegistryKey[] = R"(HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM)"; -static constexpr char kPersonalizeRegistryKey[] = R"(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize)"; - -static constexpr int kDefaultResizeBorderThicknessClassic = 4; -static constexpr int kDefaultResizeBorderThicknessAero = 8; -static constexpr int kDefaultCaptionHeight = 23; - -enum : WORD -{ - _DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19, - _DWMWA_USE_IMMERSIVE_DARK_MODE = 20, - _DWMWA_VISIBLE_FRAME_BORDER_THICKNESS = 37 -}; - [[nodiscard]] static inline bool isWin10RS1OrGreater() { #if (QT_VERSION >= QT_VERSION_CHECK(5, 9, 0))