-
Notifications
You must be signed in to change notification settings - Fork 99
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在多个显示器之间切换时,界面错位并失效 #10
Comments
same problem |
Qt 5.12.9 + Mingw,same problem |
简单处理了下,跨屏幕移动时resize下,有概率失败。 .../FramelessHelper/Kernels/NativeWindowHelper.cpp | 30 ++++++++++++++--------
1 file changed, 19 insertions(+), 11 deletions(-)
diff --git a/ThirdParty/FramelessHelper/Kernels/NativeWindowHelper.cpp b/ThirdParty/FramelessHelper/Kernels/NativeWindowHelper.cpp
index 0c2cefa..b75da1f 100644
--- a/ThirdParty/FramelessHelper/Kernels/NativeWindowHelper.cpp
+++ b/ThirdParty/FramelessHelper/Kernels/NativeWindowHelper.cpp
@@ -110,7 +110,13 @@ bool NativeWindowHelper::nativeEventFilter(void *msg, long *result)
LPMINMAXINFO lpMinMaxInfo = reinterpret_cast<LPMINMAXINFO>(lParam);
QRect g = d->availableGeometry();
+ static QRect old_g = g;
QMargins m = d->maximizedMargins();
+ if(g != old_g) {
+ //fix:screen swtich window size change bug
+ old_g = g;
+ d->window->resize(d->window->size());
+ }
lpMinMaxInfo->ptMaxPosition.x = - m.left();
lpMinMaxInfo->ptMaxPosition.y = - m.top();
@@ -329,15 +335,17 @@ QMargins NativeWindowHelperPrivate::maximizedMargins() const
QRect NativeWindowHelperPrivate::availableGeometry() const
{
- MONITORINFO mi{0};
- mi.cbSize = sizeof(MONITORINFO);
-
- auto hWnd = reinterpret_cast<HWND>(window->winId());
- auto hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
- if (!hMonitor || !GetMonitorInfoW(hMonitor, &mi)) {
- Q_ASSERT(NULL != hMonitor);
- return window->screen()->availableGeometry();
- }
-
- return QRect(mi.rcWork.left, mi.rcWork.top, mi.rcWork.right - mi.rcWork.left, mi.rcWork.bottom - mi.rcWork.top);
+ //fix:restore form max window,get wrong geometry size(multi screens)
+ return window->screen()->availableGeometry();
+
+// MONITORINFO mi{0};
+// mi.cbSize = sizeof(MONITORINFO);
+
+// auto hWnd = reinterpret_cast<HWND>(window->winId());
+// auto hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
+// if (!hMonitor || !GetMonitorInfoW(hMonitor, &mi)) {
+// Q_ASSERT(NULL != hMonitor);
+// return window->screen()->availableGeometry();
+// }
+// return QRect(mi.rcWork.left, mi.rcWork.top, mi.rcWork.right - mi.rcWork.left, mi.rcWork.bottom - mi.rcWork.top);
} |
已遇到同样的问题。从一个屏幕到另一个屏幕的拖动过程中,绘制的区域变小了(水平方向上大约10 |
同样遇到相同的问题,不知道如何修改 |
我尝试在 |
HOOK本就不是正道 |
感觉不涉及到什么正道不正道的问题,用win32开发无边框也是拦截消息的做法(msdn 的文档 https://docs.microsoft.com/en-us/windows/win32/dwm/customframe ) 更觉得这是windows系统做的不好 |
确实解决了,还可以精简下只设置SetWindowPos就行。
|
在构造函数添加以下代码就可以了,好像是屏幕变化的时候Qt又给窗口加上了边框导致的
|
在多个显示器之间切换时,界面错位并失效,编译环境VS2015/2017都试过


显示器【1】正常
拖动到显示器【2】错位并失效
The text was updated successfully, but these errors were encountered: