wangwenx190 / framelesshelper

Project moved to: https://github.com/stdware/qwindowkit Cross-platform window customization framework for Qt Widgets and Qt Quick. Supports Windows, Linux and macOS.
MIT License
849 stars 202 forks source link

qmake-mingw编译失败 #303

Closed czyt1988 closed 1 year ago

czyt1988 commented 1 year ago

msvc可编译,但mingw无法编译

有部分WM_大头的宏没有定义

image

我进入winuser.h里面,貌似_WIN32_WINNT这个条件无法满足(我的系统是windows11)

image image

另外还有2个错误

image

image

wangwenx190 commented 1 year ago

看起来是WIN32_WINNT宏的值太老导致的,你手动全局定义一下就好了,值就给0x0A00,这个能解锁所有的限制

czyt1988 commented 1 year ago

我看你framelesshelper_windows.h里对_WIN32_WINNT进行了重新定义,可消除WM的异常

#if __has_include(<sdkddkver.h>)
#  include <sdkddkver.h>
#endif

#ifndef _WIN32_WINNT_WIN10
#  define _WIN32_WINNT_WIN10 0x0A00
#endif

#ifndef NTDDI_WIN10_NI
#  define NTDDI_WIN10_NI 0x0A00000C
#endif

#ifndef WINVER
#  define WINVER _WIN32_WINNT_WIN10
#endif

#ifndef _WIN32_WINNT
#  define _WIN32_WINNT _WIN32_WINNT_WIN10
#endif

#ifndef NTDDI_VERSION
#  define NTDDI_VERSION NTDDI_WIN10_NI
#endif

//保证_WIN32_WINNT和WINVER 的版本为_WIN32_WINNT_WIN10
#if _WIN32_WINNT < _WIN32_WINNT_WIN10
#undef _WIN32_WINNT
#define _WIN32_WINNT _WIN32_WINNT_WIN10
#endif

#if WINVER < _WIN32_WINNT_WIN10
#undef WINVER
#define WINVER _WIN32_WINNT_WIN10
#endif

#include <windows.h>
#include <uxtheme.h>
#include <shellapi.h>
#include <dwmapi.h>

另外我针对原来所有WM打头的错误进行了ifdef,目前WM的宏定义问题解决了,但还有一个错误如下:

image

image

wangwenx190 commented 1 year ago

上面的改动麻烦你先提个PR吧

wangwenx190 commented 1 year ago

下面这个错误不要看Qt头文件,你定位一下FramelessHelper哪个变量引起的,截图给我看看

czyt1988 commented 1 year ago

下面这个错误不要看Qt头文件,你定位一下FramelessHelper哪个变量引起的,截图给我看看

pr已经提交(#306),第二个错误是因为QPointer< QWidget > window=nullptr;的初始化导致的,在mingw下,头文件中申明的QPointer< QWidget > window不能直接初始化为nullptr,QPointer< QWidget > window=nullptr;QPointer< QWidget > window{nullptr};都不行,直接去掉初始化就好,QPointer默认就是nullptr