Commit ec814a68 authored by dmMaze's avatar dmMaze
Browse files

fix frameless window for windows

parent 65fd0d18
Loading
Loading
Loading
Loading
+39 −13
Original line number Diff line number Diff line
@@ -8,9 +8,12 @@ import win32api
import win32con
import win32gui
import win32print
from win32comext.shell import shellcon
from qtpy.QtCore import QOperatingSystemVersion
from qtpy.QtGui import QGuiApplication
from win32comext.shell import shellcon
from qtpy import API
USE_PYSIDE6 = API == 'pyside6'



def isMaximized(hWnd):
@@ -171,7 +174,30 @@ def isGreaterEqualVersion(version):
    """
    return QOperatingSystemVersion.current() >= version

if USE_PYSIDE6:
    from PySide6.QtCore import QVersionNumber
    def isGreaterEqualWin8_1():
        """ determine if the windows version ≥ Win8.1 """
        cv = QOperatingSystemVersion.current()
        cv = QVersionNumber(cv.majorVersion(), cv.minorVersion(), cv.microVersion())
        return cv >= QVersionNumber(8, 1, 0)


    def isGreaterEqualWin10():
        """ determine if the windows version ≥ Win10 """
        return "Windows-10" in platform()


    def isGreaterEqualWin11():
        """ determine if the windows version ≥ Win10 """
        return isGreaterEqualWin10() and sys.getwindowsversion().build >= 22000


    def isWin7():
        """ determine if the windows version is Win7 """
        return "Windows-7" in platform()

else:
    def isGreaterEqualWin8_1():
        """ determine if the windows version ≥ Win8.1 """
        return isGreaterEqualVersion(QOperatingSystemVersion.Windows8_1)
+16 −9
Original line number Diff line number Diff line
@@ -30,7 +30,16 @@ class WindowsFramelessWindow(QWidget):
        # self.titleBar = TitleBar(self)
        self._isResizeEnabled = True

        # remove window border
        self.updateFrameless()

        # solve issue #5
        self.windowHandle().screenChanged.connect(self.__onScreenChanged)

        # self.resize(500, 500)
        # self.titleBar.raise_()

    def updateFrameless(self):
        """ update frameless window """
        if not win_utils.isWin7():
            self.setWindowFlags(self.windowFlags() | Qt.WindowType.FramelessWindowHint)
        else:
@@ -42,11 +51,6 @@ class WindowsFramelessWindow(QWidget):
        if not isinstance(self, AcrylicWindow):
            self.windowEffect.addShadowEffect(self.winId())

        # solve issue #5
        self.windowHandle().screenChanged.connect(self.__onScreenChanged)

        # self.titleBar.raise_()

    # def setTitleBar(self, titleBar):
    #     """ set custom title bar

@@ -78,7 +82,8 @@ class WindowsFramelessWindow(QWidget):
            pos = QCursor.pos()
            xPos = pos.x() - self.x()
            yPos = pos.y() - self.y()
            w, h = self.width(), self.height()
            w = self.frameGeometry().width()
            h = self.frameGeometry().height()

            # fixes https://github.com/zhiyiYo/PyQt-Frameless-Window/issues/98
            bw = 0 if win_utils.isMaximized(msg.hWnd) or win_utils.isFullScreen(msg.hWnd) else self.BORDER_WIDTH
@@ -152,6 +157,10 @@ class AcrylicWindow(WindowsFramelessWindow):
        super().__init__(parent=parent)
        self.__closedByKey = False

        self.updateFrameless()
        self.setStyleSheet("AcrylicWindow{background:transparent}")

    def updateFrameless(self):
        self.setWindowFlags(Qt.WindowType.FramelessWindowHint)
        self.windowEffect.enableBlurBehindWindow(self.winId())
        self.windowEffect.addWindowAnimation(self.winId())
@@ -164,8 +173,6 @@ class AcrylicWindow(WindowsFramelessWindow):
            if win_utils.isGreaterEqualWin11():
                self.windowEffect.addShadowEffect(self.winId())

        self.setStyleSheet("AcrylicWindow{background:transparent}")

    def nativeEvent(self, eventType, message):
        """ Handle the Windows message """
        msg = MSG.from_address(message.__int__())