diff --git a/src/ui/FramelessDelegateWin.cpp b/src/ui/FramelessDelegateWin.cpp index 208ca85d..5f9ee428 100644 --- a/src/ui/FramelessDelegateWin.cpp +++ b/src/ui/FramelessDelegateWin.cpp @@ -191,11 +191,12 @@ bool FramelessDelegateWin::nativeEvent(const QByteArray & eventType, void* messa return false; } case WM_NCLBUTTONDBLCLK: { + *result = 0; if (mainWidget_->maximumSize() == QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX) && mainWidget_->windowFlags().testFlag(Qt::WindowMaximizeButtonHint)) return false; else - return true; + return false; } case WM_NCRBUTTONUP: { @@ -368,12 +369,13 @@ void FramelessDelegateWin::SetNativeWindowLong() { style &= ~WS_MINIMIZEBOX; style &= ~WS_MAXIMIZEBOX; - if (!mainWidget_->windowFlags().testFlag(Qt::WindowMinimizeButtonHint) || - mainWidget_->maximumSize() != QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)) { - style &= ~WS_MINIMIZEBOX; + // 根据 Qt 窗口标志与大小约束,启用系统最小化/最大化按钮能力 + const bool canResize = (mainWidget_->maximumSize() == QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); + if (mainWidget_->windowFlags().testFlag(Qt::WindowMinimizeButtonHint) && canResize) { + style |= WS_MINIMIZEBOX; } - if (!mainWidget_->windowFlags().testFlag(Qt::WindowMaximizeButtonHint)) { - style &= ~WS_MAXIMIZEBOX; + if (mainWidget_->windowFlags().testFlag(Qt::WindowMaximizeButtonHint) && canResize) { + style |= WS_MAXIMIZEBOX; } ::SetWindowLongPtr(hwnd, GWL_STYLE, style); diff --git a/src/ui/FramelessWindow.cpp b/src/ui/FramelessWindow.cpp index de061545..a941e097 100644 --- a/src/ui/FramelessWindow.cpp +++ b/src/ui/FramelessWindow.cpp @@ -6,9 +6,13 @@ FramelessWindow::FramelessWindow(QWidget* parent) : QFrame(parent) { - setWindowFlags(windowFlags() | Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint); + setWindowFlags(windowFlags() + | Qt::Window + | Qt::FramelessWindowHint + | Qt::WindowSystemMenuHint + | Qt::WindowMaximizeButtonHint + | Qt::WindowMinimizeButtonHint); - // 初始化平台相关的无边框委托,用于命中测试和缩放。 delegate_ = FramelessDelegate::Create(this); }