Win32 - 有没有办法获得滚动条周围的边距或边框大小?

Win32 - Is there a way to get the margin or border size around a scrollbar?

如何获取客户区(比如记事本)中显示的内容和滚动条之间的区域。那里有一个轻微的差距/边界。这是如何确定的?

TIA!!

这是一个示例:请注意小“j”的一部分显示,但它与右侧的滚动条之间有一个边框。你怎么知道这个差距,因为客户 RECT 包括差距?

记事本对其文本区域使用标准的 EDIT 控件。 EDIT 控件实现了两个消息:EM_GETMARGINSEM_GETRECT。由 EM_GETMARGINSEM_GETRECT 编辑的值 return 取决于所选字体。

对于 96 DPI 的 Courier New:

height   client rect EM_GETMARGINS EM_GETRECT  right margin
         left right  left right    left right  by EM_GETRECT
10pt     0    489    2    1        3    487    2
20pt     0    489    5    3        6    485    4

对于 96 DPI 的 Lucida 控制台:

height   client rect EM_GETMARGINS EM_GETRECT  right margin
         left right  left right    left right  by EM_GETRECT
10pt     0    489    0    0        1    488    1
20pt     0    489    0    1        1    487    2

对于 96 DPI 的 Consolas:

height   client rect EM_GETMARGINS EM_GETRECT  right margin
         left right  left right    left right  by EM_GETRECT
10pt     0    489    3    3        5    485    4
20pt     0    489    7    6        8    482    7

出于某种原因 EM_GETMARGINSEM_GETRECT return 边距略有不同。目视检查它们似乎 EM_GETRECT 产生更正确的结果。

这些是默认值。记事本可以修改它们,但是 Windows 10 个值如上所述。请注意,在 Windows 10 上,一个白色像素属于垂直滚动条(可以通过将鼠标悬停在它上面来验证, 导致滚动条的拇指突出显示并将光标从 i-beam 更改为箭头) .

看起来您正在使用 Consolas 并获得默认边距。