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;
}
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);

View File

@ -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);
}