如果我最大化 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/