windows - 为什么最大化的 Delphi 窗体比 GetSystemMetrics 值宽 8 像素且高于 GetSystemMetrics 值?

标签 windows delphi winapi

如果我最大化 Delphi 窗体,宽度和高度值比相应的 GetSystemMetrics SM_CXSCREEN 和 SM_CYSCREEN 大 8 个像素?

例如:

当我右键单击我的屏幕并获取属性时,我的屏幕分辨率为 1680 X 1050。这些值与从 GetSystemMetrics(SM_CXSCREEN) 和 GetSystemMetrics(SM_CYSCREEN) 返回的值相同。

当我在我的 Delphi 应用程序中最大化窗体时,我得到的宽度为 1688,高度为 1058。有 8 个像素的差异。是什么导致了这种差异?

最佳答案

最初实现最大化窗口时,设计人员希望删除调整大小的边框。他们没有删除它们,而是决定将这些边框绘制到屏幕边缘之外,这样就不会看到它们。因此,一个最大化窗口的相当令人惊讶的窗口矩形。

随着多显示器系统的出现,这个实现决策成为了一个问题。那时已经有应用程序依赖于这种行为,因此 Windows 团队决定为了兼容性而保留这种行为。这意味着最大化的窗口会泄漏到相邻的屏幕上。及时,窗口管理器获得了可以抑制泄漏的能力。

Raymond Chen和往常一样,有一篇文章涵盖了细节:Why does a maximized window have the wrong window rectangle?

关于windows - 为什么最大化的 Delphi 窗体比 GetSystemMetrics 值宽 8 像素且高于 GetSystemMetrics 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667558/

相关文章:

python - 如何使用 Python 在 Windows 中修改密码过期时间?

c++ - Windows Precision Touchpad 单击/点击事件是否通过 WM_INPUT 消息进行通信?如果没有,我如何获得它们?

windows - 使用 VBA 在给定目录中运行批处理文件

delphi - 从互联网下载 jpg,没有错误,否则加载 template.jpg

c - 如何在 C 语言的 Windows 上安装访问冲突错误的信号处理程序?

C++:如何为控制台应用程序设置新的 wndProc?

winapi - Windows 资源管理器悬停和选择的视觉样式

windows - 如何从 SVG 文件在窗口中批量创建图标 webfonts

regex - 用减号替换空格,但仅限在括号内

delphi - 在 Delphi 2006 上使用 IdSMTPServer 拒绝超过一定大小的 SMTP 消息