mirror of
https://github.com/zhuzichu520/FluentUI.git
synced 2024-10-30 15:57:37 +08:00
切换窗口会闪一下边框,需修复
This commit is contained in:
parent
a26f643ba3
commit
5ea71e2c1a
@ -2261,21 +2261,26 @@ Some contents...</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/page/T_Theme.qml" line="123"/>
|
<location filename="qml/page/T_Theme.qml" line="123"/>
|
||||||
|
<source>Rounded Window</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="qml/page/T_Theme.qml" line="134"/>
|
||||||
<source>Open Blur Window</source>
|
<source>Open Blur Window</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/page/T_Theme.qml" line="136"/>
|
<location filename="qml/page/T_Theme.qml" line="147"/>
|
||||||
<source>window tintOpacity</source>
|
<source>window tintOpacity</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/page/T_Theme.qml" line="153"/>
|
<location filename="qml/page/T_Theme.qml" line="164"/>
|
||||||
<source>window blurRadius</source>
|
<source>window blurRadius</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/page/T_Theme.qml" line="169"/>
|
<location filename="qml/page/T_Theme.qml" line="180"/>
|
||||||
<source>window effect</source>
|
<source>window effect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2443,21 +2443,26 @@ Some contents...</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/page/T_Theme.qml" line="123"/>
|
<location filename="qml/page/T_Theme.qml" line="123"/>
|
||||||
|
<source>Rounded Window</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="qml/page/T_Theme.qml" line="134"/>
|
||||||
<source>Open Blur Window</source>
|
<source>Open Blur Window</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/page/T_Theme.qml" line="136"/>
|
<location filename="qml/page/T_Theme.qml" line="147"/>
|
||||||
<source>window tintOpacity</source>
|
<source>window tintOpacity</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/page/T_Theme.qml" line="153"/>
|
<location filename="qml/page/T_Theme.qml" line="164"/>
|
||||||
<source>window blurRadius</source>
|
<source>window blurRadius</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/page/T_Theme.qml" line="169"/>
|
<location filename="qml/page/T_Theme.qml" line="180"/>
|
||||||
<source>window effect</source>
|
<source>window effect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -119,6 +119,17 @@ FluScrollablePage{
|
|||||||
FluTheme.animationEnabled = !FluTheme.animationEnabled
|
FluTheme.animationEnabled = !FluTheme.animationEnabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FluText{
|
||||||
|
text: qsTr("Rounded Window")
|
||||||
|
Layout.topMargin: 20
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
Layout.topMargin: 5
|
||||||
|
checked: window.roundCornerEnable
|
||||||
|
onClicked: {
|
||||||
|
window.roundCornerEnable = !window.roundCornerEnable
|
||||||
|
}
|
||||||
|
}
|
||||||
FluText{
|
FluText{
|
||||||
text: qsTr("Open Blur Window")
|
text: qsTr("Open Blur Window")
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
|
@ -76,7 +76,7 @@ static inline bool isWin10Only() {
|
|||||||
|
|
||||||
static inline bool isWin7Only() {
|
static inline bool isWin7Only() {
|
||||||
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
||||||
return rovi.dwMajorVersion = 7;
|
return rovi.dwMajorVersion == 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline QByteArray qtNativeEventType() {
|
static inline QByteArray qtNativeEventType() {
|
||||||
@ -109,8 +109,7 @@ static inline bool initializeFunctionPointers() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!pDwmEnableBlurBehindWindow) {
|
if (!pDwmEnableBlurBehindWindow) {
|
||||||
pDwmEnableBlurBehindWindow =
|
pDwmEnableBlurBehindWindow = reinterpret_cast<DwmEnableBlurBehindWindowFunc>(
|
||||||
reinterpret_cast<DwmEnableBlurBehindWindowFunc>(
|
|
||||||
GetProcAddress(module, "DwmEnableBlurBehindWindow"));
|
GetProcAddress(module, "DwmEnableBlurBehindWindow"));
|
||||||
if (!pDwmEnableBlurBehindWindow) {
|
if (!pDwmEnableBlurBehindWindow) {
|
||||||
return false;
|
return false;
|
||||||
@ -145,6 +144,25 @@ static inline void setShadow(HWND hwnd) {
|
|||||||
if (initializeFunctionPointers()) {
|
if (initializeFunctionPointers()) {
|
||||||
pDwmExtendFrameIntoClientArea(hwnd, &shadow);
|
pDwmExtendFrameIntoClientArea(hwnd, &shadow);
|
||||||
}
|
}
|
||||||
|
if(isWin7Only()){
|
||||||
|
SetClassLong(hwnd, GCL_STYLE, GetClassLong(hwnd, GCL_STYLE) | CS_DROPSHADOW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setWindowRoundCorners(HWND hwnd) {
|
||||||
|
const MARGINS shadow = {-15};
|
||||||
|
if (initializeFunctionPointers()) {
|
||||||
|
pDwmExtendFrameIntoClientArea(hwnd, &shadow);
|
||||||
|
}
|
||||||
|
RECT rect;
|
||||||
|
GetWindowRect(hwnd, &rect);
|
||||||
|
int width = rect.right - rect.left;
|
||||||
|
int height = rect.bottom - rect.top;
|
||||||
|
const int radius = 15;
|
||||||
|
HRGN hRgn = CreateRoundRectRgn(0, 0, width + 1, height + 1, radius, radius);
|
||||||
|
SetWindowRgn(hwnd, hRgn, TRUE);
|
||||||
|
SetClassLong(hwnd, GCL_STYLE, GetClassLong(hwnd, GCL_STYLE) | CS_DROPSHADOW);
|
||||||
|
DeleteObject(hRgn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool setWindowDarkMode(HWND hwnd, const BOOL enable) {
|
static inline bool setWindowDarkMode(HWND hwnd, const BOOL enable) {
|
||||||
@ -375,7 +393,8 @@ void FluFrameless::componentComplete() {
|
|||||||
int w = window()->width();
|
int w = window()->width();
|
||||||
int h = window()->height();
|
int h = window()->height();
|
||||||
_current = window()->winId();
|
_current = window()->winId();
|
||||||
window()->setFlags((window()->flags()) | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
|
window()->setFlags((window()->flags()) | Qt::CustomizeWindowHint |
|
||||||
|
Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
|
||||||
if (!_fixSize) {
|
if (!_fixSize) {
|
||||||
window()->setFlag(Qt::WindowMaximizeButtonHint);
|
window()->setFlag(Qt::WindowMaximizeButtonHint);
|
||||||
}
|
}
|
||||||
@ -390,7 +409,6 @@ void FluFrameless::componentComplete() {
|
|||||||
if (_closeButton) {
|
if (_closeButton) {
|
||||||
setHitTestVisible(_closeButton);
|
setHitTestVisible(_closeButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto appBarHeight = _appbar->height();
|
auto appBarHeight = _appbar->height();
|
||||||
h = qRound(h + appBarHeight);
|
h = qRound(h + appBarHeight);
|
||||||
if (_fixSize) {
|
if (_fixSize) {
|
||||||
@ -401,15 +419,14 @@ void FluFrameless::componentComplete() {
|
|||||||
window()->setMaximumHeight(window()->maximumHeight() + appBarHeight);
|
window()->setMaximumHeight(window()->maximumHeight() + appBarHeight);
|
||||||
}
|
}
|
||||||
window()->resize(QSize(w, h));
|
window()->resize(QSize(w, h));
|
||||||
connect(this, &FluFrameless::topmostChanged, this, [this] {
|
connect(this, &FluFrameless::topmostChanged, this, [this] { _setWindowTopmost(topmost()); });
|
||||||
_setWindowTopmost(topmost());
|
|
||||||
});
|
|
||||||
_setWindowTopmost(topmost());
|
_setWindowTopmost(topmost());
|
||||||
_setMaximizeHovered(false);
|
_setMaximizeHovered(false);
|
||||||
_setMaximizePressed(false);
|
_setMaximizePressed(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[maybe_unused]] bool FluFrameless::nativeEventFilter(const QByteArray &eventType, void *message, QT_NATIVE_EVENT_RESULT_TYPE *result) {
|
[[maybe_unused]] bool FluFrameless::nativeEventFilter(const QByteArray &eventType, void *message,
|
||||||
|
QT_NATIVE_EVENT_RESULT_TYPE *result) {
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
if ((eventType != qtNativeEventType()) || !message) {
|
if ((eventType != qtNativeEventType()) || !message) {
|
||||||
return false;
|
return false;
|
||||||
@ -430,7 +447,8 @@ void FluFrameless::componentComplete() {
|
|||||||
auto *wp = reinterpret_cast<WINDOWPOS *>(lParam);
|
auto *wp = reinterpret_cast<WINDOWPOS *>(lParam);
|
||||||
if (wp != nullptr && (wp->flags & SWP_NOSIZE) == 0) {
|
if (wp != nullptr && (wp->flags & SWP_NOSIZE) == 0) {
|
||||||
wp->flags |= SWP_NOCOPYBITS;
|
wp->flags |= SWP_NOCOPYBITS;
|
||||||
*result = static_cast<QT_NATIVE_EVENT_RESULT_TYPE>(::DefWindowProcW(hwnd, uMsg, wParam, lParam));
|
*result = static_cast<QT_NATIVE_EVENT_RESULT_TYPE>(
|
||||||
|
::DefWindowProcW(hwnd, uMsg, wParam, lParam));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -499,21 +517,23 @@ void FluFrameless::componentComplete() {
|
|||||||
*result = FALSE;
|
*result = FALSE;
|
||||||
return false;
|
return false;
|
||||||
} else if (uMsg == WM_NCACTIVATE) {
|
} else if (uMsg == WM_NCACTIVATE) {
|
||||||
if (effective() || (!effect().isEmpty() && _currentEffect!="normal")) {
|
if (effective() || (!effect().isEmpty() && effect() != "normal")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
*result = TRUE;
|
*result = TRUE;
|
||||||
return true;
|
return true;
|
||||||
} else if (_isWindows11OrGreater && (uMsg == WM_NCLBUTTONDBLCLK || uMsg == WM_NCLBUTTONDOWN)) {
|
} else if (_isWindows11OrGreater && (uMsg == WM_NCLBUTTONDBLCLK || uMsg == WM_NCLBUTTONDOWN)) {
|
||||||
if (_hitMaximizeButton()) {
|
if (_hitMaximizeButton()) {
|
||||||
QMouseEvent event = QMouseEvent(QEvent::MouseButtonPress, QPoint(), QPoint(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
|
QMouseEvent event = QMouseEvent(QEvent::MouseButtonPress, QPoint(), QPoint(),
|
||||||
|
Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
|
||||||
QGuiApplication::sendEvent(_maximizeButton, &event);
|
QGuiApplication::sendEvent(_maximizeButton, &event);
|
||||||
_setMaximizePressed(true);
|
_setMaximizePressed(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (_isWindows11OrGreater && (uMsg == WM_NCLBUTTONUP || uMsg == WM_NCRBUTTONUP)) {
|
} else if (_isWindows11OrGreater && (uMsg == WM_NCLBUTTONUP || uMsg == WM_NCRBUTTONUP)) {
|
||||||
if (_hitMaximizeButton()) {
|
if (_hitMaximizeButton()) {
|
||||||
QMouseEvent event = QMouseEvent(QEvent::MouseButtonRelease, QPoint(), QPoint(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
|
QMouseEvent event = QMouseEvent(QEvent::MouseButtonRelease, QPoint(), QPoint(),
|
||||||
|
Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
|
||||||
QGuiApplication::sendEvent(_maximizeButton, &event);
|
QGuiApplication::sendEvent(_maximizeButton, &event);
|
||||||
_setMaximizePressed(false);
|
_setMaximizePressed(false);
|
||||||
return true;
|
return true;
|
||||||
@ -568,7 +588,8 @@ void FluFrameless::_showSystemMenu(QPoint point) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const QPoint origin = screen->geometry().topLeft();
|
const QPoint origin = screen->geometry().topLeft();
|
||||||
auto nativePos = QPointF(QPointF(point - origin) * window()->devicePixelRatio()).toPoint() + origin;
|
auto nativePos =
|
||||||
|
QPointF(QPointF(point - origin) * window()->devicePixelRatio()).toPoint() + origin;
|
||||||
HWND hwnd = reinterpret_cast<HWND>(window()->winId());
|
HWND hwnd = reinterpret_cast<HWND>(window()->winId());
|
||||||
auto hMenu = ::GetSystemMenu(hwnd, FALSE);
|
auto hMenu = ::GetSystemMenu(hwnd, FALSE);
|
||||||
if (_isMaximized() || _isFullScreen()) {
|
if (_isMaximized() || _isFullScreen()) {
|
||||||
@ -585,8 +606,10 @@ void FluFrameless::_showSystemMenu(QPoint point) {
|
|||||||
::EnableMenuItem(hMenu, SC_SIZE, MFS_DISABLED);
|
::EnableMenuItem(hMenu, SC_SIZE, MFS_DISABLED);
|
||||||
::EnableMenuItem(hMenu, SC_MAXIMIZE, MFS_DISABLED);
|
::EnableMenuItem(hMenu, SC_MAXIMIZE, MFS_DISABLED);
|
||||||
}
|
}
|
||||||
const int result = ::TrackPopupMenu(hMenu, (TPM_RETURNCMD | (QGuiApplication::isRightToLeft() ? TPM_RIGHTALIGN : TPM_LEFTALIGN)), nativePos.x(),
|
const int result = ::TrackPopupMenu(
|
||||||
nativePos.y(), 0, hwnd, nullptr);
|
hMenu,
|
||||||
|
(TPM_RETURNCMD | (QGuiApplication::isRightToLeft() ? TPM_RIGHTALIGN : TPM_LEFTALIGN)),
|
||||||
|
nativePos.x(), nativePos.y(), 0, hwnd, nullptr);
|
||||||
if (result) {
|
if (result) {
|
||||||
::PostMessageW(hwnd, WM_SYSCOMMAND, result, 0);
|
::PostMessageW(hwnd, WM_SYSCOMMAND, result, 0);
|
||||||
}
|
}
|
||||||
@ -740,7 +763,8 @@ bool FluFrameless::eventFilter(QObject *obj, QEvent *ev) {
|
|||||||
# else
|
# else
|
||||||
event->position().toPoint();
|
event->position().toPoint();
|
||||||
# endif
|
# endif
|
||||||
if(p.x() >= _margins && p.x() <= (window()->width() - _margins) && p.y() >= _margins && p.y() <= (window()->height() - _margins)){
|
if (p.x() >= _margins && p.x() <= (window()->width() - _margins) && p.y() >= _margins &&
|
||||||
|
p.y() <= (window()->height() - _margins)) {
|
||||||
if (_edges != 0) {
|
if (_edges != 0) {
|
||||||
_edges = 0;
|
_edges = 0;
|
||||||
_updateCursor(_edges);
|
_updateCursor(_edges);
|
||||||
|
@ -162,6 +162,7 @@ private:
|
|||||||
|
|
||||||
void _setMaximizeHovered(bool val);
|
void _setMaximizeHovered(bool val);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
quint64 _current = 0;
|
quint64 _current = 0;
|
||||||
int _edges = 0;
|
int _edges = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user