fix can not max widnow

This commit is contained in:
brige 2025-11-16 16:09:45 +08:00
parent 3824169324
commit 5367abc5e8
2 changed files with 14 additions and 8 deletions

View File

@ -191,11 +191,12 @@ bool FramelessDelegateWin::nativeEvent(const QByteArray & eventType, void* messa
return false; return false;
} }
case WM_NCLBUTTONDBLCLK: { case WM_NCLBUTTONDBLCLK: {
*result = 0;
if (mainWidget_->maximumSize() == QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX) && if (mainWidget_->maximumSize() == QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX) &&
mainWidget_->windowFlags().testFlag(Qt::WindowMaximizeButtonHint)) mainWidget_->windowFlags().testFlag(Qt::WindowMaximizeButtonHint))
return false; return false;
else else
return true; return false;
} }
case WM_NCRBUTTONUP: case WM_NCRBUTTONUP:
{ {
@ -368,12 +369,13 @@ void FramelessDelegateWin::SetNativeWindowLong() {
style &= ~WS_MINIMIZEBOX; style &= ~WS_MINIMIZEBOX;
style &= ~WS_MAXIMIZEBOX; style &= ~WS_MAXIMIZEBOX;
if (!mainWidget_->windowFlags().testFlag(Qt::WindowMinimizeButtonHint) || // 根据 Qt 窗口标志与大小约束,启用系统最小化/最大化按钮能力
mainWidget_->maximumSize() != QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)) { const bool canResize = (mainWidget_->maximumSize() == QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
style &= ~WS_MINIMIZEBOX; if (mainWidget_->windowFlags().testFlag(Qt::WindowMinimizeButtonHint) && canResize) {
style |= WS_MINIMIZEBOX;
} }
if (!mainWidget_->windowFlags().testFlag(Qt::WindowMaximizeButtonHint)) { if (mainWidget_->windowFlags().testFlag(Qt::WindowMaximizeButtonHint) && canResize) {
style &= ~WS_MAXIMIZEBOX; style |= WS_MAXIMIZEBOX;
} }
::SetWindowLongPtr(hwnd, GWL_STYLE, style); ::SetWindowLongPtr(hwnd, GWL_STYLE, style);

View File

@ -6,9 +6,13 @@
FramelessWindow::FramelessWindow(QWidget* parent) FramelessWindow::FramelessWindow(QWidget* parent)
: QFrame(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); delegate_ = FramelessDelegate::Create(this);
} }