diff --git a/examples/gallery/app/components/frameless_window.py b/examples/gallery/app/components/frameless_window.py new file mode 100644 index 0000000000000000000000000000000000000000..818e21cfa6475b6937ca4e33f074f4b3e67f4f53 --- /dev/null +++ b/examples/gallery/app/components/frameless_window.py @@ -0,0 +1,45 @@ +import sys + +if sys.platform != "win32": + from qframelesswindow import FramelessWindow +else: + from ctypes.wintypes import MSG + + import win32con + from PyQt5.QtCore import QPoint, QEvent, Qt + from PyQt5.QtGui import QCursor, QMouseEvent + from PyQt5.QtWidgets import QApplication + + from qframelesswindow import FramelessWindow as Window + from qframelesswindow.titlebar.title_bar_buttons import TitleBarButtonState + + + class FramelessWindow(Window): + """ Frameless window """ + + def nativeEvent(self, eventType, message): + """ Handle the Windows message """ + msg = MSG.from_address(message.__int__()) + if not msg.hWnd: + return super().nativeEvent(eventType, message) + + if msg.message == win32con.WM_NCHITTEST and self._isResizeEnabled: + if self._isHoverMaxBtn(): + self.titleBar.maxBtn.setState(TitleBarButtonState.HOVER) + return True, win32con.HTMAXBUTTON + + elif msg.message in [0x2A2, win32con.WM_MOUSELEAVE]: + self.titleBar.maxBtn.setState(TitleBarButtonState.NORMAL) + elif msg.message in [win32con.WM_NCLBUTTONDOWN, win32con.WM_NCLBUTTONDBLCLK] and self._isHoverMaxBtn(): + e = QMouseEvent(QEvent.MouseButtonPress, QPoint(), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) + QApplication.sendEvent(self.titleBar.maxBtn, e) + return True, 0 + elif msg.message in [win32con.WM_NCLBUTTONUP, win32con.WM_NCRBUTTONUP] and self._isHoverMaxBtn(): + e = QMouseEvent(QEvent.MouseButtonRelease, QPoint(), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) + QApplication.sendEvent(self.titleBar.maxBtn, e) + + return super().nativeEvent(eventType, message) + + def _isHoverMaxBtn(self): + pos = QCursor.pos() - self.geometry().topLeft() - self.titleBar.pos() + return self.titleBar.childAt(pos) is self.titleBar.maxBtn \ No newline at end of file diff --git a/examples/gallery/app/view/main_window.py b/examples/gallery/app/view/main_window.py index 3b8ae773c47430e7a675cf21b1f888c6a5213744..6b2c160219ee7b7987917ff033cf519c851a6cc6 100644 --- a/examples/gallery/app/view/main_window.py +++ b/examples/gallery/app/view/main_window.py @@ -7,7 +7,6 @@ from PyQt5.QtWidgets import QApplication, QHBoxLayout, QFrame, QWidget from qfluentwidgets import (NavigationInterface, NavigationItemPosition, MessageBox, isDarkTheme, PopUpAniStackedWidget, qrouter) from qfluentwidgets import FluentIcon as FIF -from qframelesswindow import FramelessWindow from .title_bar import CustomTitleBar from .gallery_interface import GalleryInterface @@ -27,6 +26,7 @@ from .text_interface import TextInterface from .view_interface import ViewInterface from ..common.config import SUPPORT_URL from ..components.avatar_widget import AvatarWidget +from ..components.frameless_window import FramelessWindow from ..common.icon import Icon from ..common.signal_bus import signalBus from ..common.style_sheet import StyleSheet