Update comments.
Make it more clearly. Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
parent
b94e534906
commit
ff555585c2
|
@ -819,8 +819,8 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType,
|
||||||
// 如果窗口最大化后,其尺寸和屏幕尺寸相等(因为任务栏隐藏了,所以窗口最大化
|
// 如果窗口最大化后,其尺寸和屏幕尺寸相等(因为任务栏隐藏了,所以窗口最大化
|
||||||
// 后其实是充满了整个屏幕,变相的全屏了),Windows会认为窗口已经进入全屏的
|
// 后其实是充满了整个屏幕,变相的全屏了),Windows会认为窗口已经进入全屏的
|
||||||
// 状态,从而导致自动隐藏的任务栏无法弹出。要避免这个状况,就要使窗口的尺寸
|
// 状态,从而导致自动隐藏的任务栏无法弹出。要避免这个状况,就要使窗口的尺寸
|
||||||
// 小于屏幕尺寸。我下面的做法,参考了火狐和Chromium。但是如果没有开启任务
|
// 小于屏幕尺寸。我下面的做法参考了火狐、Chromium和Windows Terminal
|
||||||
// 栏自动隐藏,是不存在这个问题的,所以要先进行判断。
|
// 如果没有开启任务栏自动隐藏,是不存在这个问题的,所以要先进行判断。
|
||||||
// 一般情况下,*result设置为0(相当于DefWindowProc的返回值为0)就可以了,
|
// 一般情况下,*result设置为0(相当于DefWindowProc的返回值为0)就可以了,
|
||||||
// 根据MSDN的说法,返回0意为此消息已经被程序自行处理了,让Windows跳过此消
|
// 根据MSDN的说法,返回0意为此消息已经被程序自行处理了,让Windows跳过此消
|
||||||
// 息,否则Windows会添加对此消息的默认处理,对于当前这个消息而言,就意味着
|
// 息,否则Windows会添加对此消息的默认处理,对于当前这个消息而言,就意味着
|
||||||
|
@ -828,11 +828,9 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType,
|
||||||
// 为FALSE时,只能返回0,但当其为TRUE时,可以返回0,也可以返回一个WVR_常
|
// 为FALSE时,只能返回0,但当其为TRUE时,可以返回0,也可以返回一个WVR_常
|
||||||
// 量。根据Chromium的注释,当存在非客户区时,如果返回WVR_REDRAW会导致子
|
// 量。根据Chromium的注释,当存在非客户区时,如果返回WVR_REDRAW会导致子
|
||||||
// 窗口/子控件出现奇怪的bug(自绘控件错位),并且Lucas在Windows
|
// 窗口/子控件出现奇怪的bug(自绘控件错位),并且Lucas在Windows
|
||||||
// 10上成
|
// 10上成功复现,说明这个bug至今都没有解决。我查阅了大量资料,发现唯一的解
|
||||||
// 功复现,说明这个bug至今都没有解决。因为这个是Windows自身的bug,且已经
|
// 决方案就是返回0。但如果不存在非客户区,且wParam为TRUE,最好返回
|
||||||
// 存在很久,这种情况下只有返回0才能规避这个问题。但如果不存在非客户区,且
|
// WVR_REDRAW,否则窗口在调整大小可能会产生严重的闪烁现象。
|
||||||
// wParam为TRUE,最好返回WVR_REDRAW,否则窗口在调整大小可能会产生严重的
|
|
||||||
// 闪烁现象。
|
|
||||||
// 虽然对大多数消息来说,返回0都代表让Windows忽略此消息,但实际上不同消息
|
// 虽然对大多数消息来说,返回0都代表让Windows忽略此消息,但实际上不同消息
|
||||||
// 能接受的返回值是不一样的,请注意自行查阅MSDN。
|
// 能接受的返回值是不一样的,请注意自行查阅MSDN。
|
||||||
|
|
||||||
|
@ -1013,7 +1011,8 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType,
|
||||||
}
|
}
|
||||||
case WM_NCACTIVATE: {
|
case WM_NCACTIVATE: {
|
||||||
// DefWindowProc won't repaint the window border if lParam (normally
|
// DefWindowProc won't repaint the window border if lParam (normally
|
||||||
// a HRGN) is -1.
|
// a HRGN) is -1. See the following link's "lParam" section:
|
||||||
|
// https://docs.microsoft.com/en-us/windows/win32/winmsg/wm-ncactivate
|
||||||
// Don't use "*result = 0" otherwise the window won't respond to
|
// Don't use "*result = 0" otherwise the window won't respond to
|
||||||
// the window active state change.
|
// the window active state change.
|
||||||
*result =
|
*result =
|
||||||
|
@ -1022,10 +1021,10 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType,
|
||||||
}
|
}
|
||||||
case WM_NCHITTEST: {
|
case WM_NCHITTEST: {
|
||||||
// 原生Win32窗口只有顶边是在窗口内部resize的,其余三边都是在窗口
|
// 原生Win32窗口只有顶边是在窗口内部resize的,其余三边都是在窗口
|
||||||
// 外部进行resize的,其原理是,WS_THICKFRAME会在窗口的左、右和
|
// 外部进行resize的,其原理是,WS_THICKFRAME这个窗口样式会在窗
|
||||||
// 底边添加三个透明的resize区域,这三个区域在正常状态下是完全不可
|
// 口的左、右和底边添加三个透明的resize区域,这三个区域在正常状态
|
||||||
// 见的,它们由DWM负责绘制,消息也由DWM负责侦测和触发。这些区域的
|
// 下是完全不可见的,它们由DWM负责绘制和控制。这些区域的宽度等于
|
||||||
// 宽度等于(SM_CXSIZEFRAME + SM_CXPADDEDBORDER),高度等于
|
// (SM_CXSIZEFRAME + SM_CXPADDEDBORDER),高度等于
|
||||||
// (SM_CYSIZEFRAME + SM_CXPADDEDBORDER),在100%缩放时,均等
|
// (SM_CYSIZEFRAME + SM_CXPADDEDBORDER),在100%缩放时,均等
|
||||||
// 于8像素。它们属于窗口区域的一部分,但不属于客户区,而是属于非客
|
// 于8像素。它们属于窗口区域的一部分,但不属于客户区,而是属于非客
|
||||||
// 户区,因此GetWindowRect获取的区域中是包含这三个resize区域的,
|
// 户区,因此GetWindowRect获取的区域中是包含这三个resize区域的,
|
||||||
|
|
Loading…
Reference in New Issue