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