DYTSrouce/src/ui/FramelessWindow.cpp

38 lines
1.2 KiB
C++
Raw Normal View History

2025-01-04 04:12:51 +00:00
#include "FramelessWindow.h"
#include "FrameTitleBar.h"
#include "FramelessDelegate.h"
FramelessWindow::FramelessWindow(QWidget* parent)
2025-06-19 14:30:05 +00:00
: QFrame(parent) {
2025-04-13 15:12:17 +00:00
setWindowFlags(windowFlags() | Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
2025-01-04 04:12:51 +00:00
2025-11-10 15:02:14 +00:00
// 初始化平台相关的无边框委托,用于命中测试和缩放。
delegate_ = FramelessDelegate::Create(this);
2025-01-04 04:12:51 +00:00
}
FramelessWindow::~FramelessWindow() {
}
void FramelessWindow::SetTitleBar(FrameTitleBar* titleBar) {
2025-04-13 15:12:17 +00:00
titleBar->SetMainWidget(this);
2025-11-10 15:02:14 +00:00
if (delegate_) {
// 通知委托当前标题栏,以便把它作为可拖动区域处理。
delegate_->SetTitleBar(titleBar);
}
2025-01-04 04:12:51 +00:00
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
bool FramelessWindow::nativeEvent(const QByteArray& eventType, void* message, qintptr* result) {
#else
bool FramelessWindow::nativeEvent(const QByteArray & eventType, void* message, long* result) {
#endif
2025-11-10 15:02:14 +00:00
// 先让无边框委托处理原生事件(如 WM_NCHITTEST 以支持边缘拖动缩放)。
if (delegate_ && delegate_->nativeEvent(eventType, message, result)) {
return true;
}
2025-04-13 15:12:17 +00:00
return QFrame::nativeEvent(eventType, message, result);
2025-01-04 04:12:51 +00:00
}