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

时间:2020-08-07 03:30:32

标签: winapi gdi

如何在工作区(例如记事本)和滚动条之间显示区域。那里有一点缝隙/边界。如何确定?

TIA !!

这里是一个示例:请注意显示的小“ j”部分,但与右侧滚动条之间有一个边框。您怎么知道这个缺口,因为客户端RECT包含了缺口?

enter image description here

1 个答案:

答案 0 :(得分:1)

记事本对其文本区域使用标准的EDIT控件。 EDIT控件实现两条消息:EM_GETMARGINSEM_GETRECTEM_GETMARGINSEM_GETRECT返回的值取决于所选的字体。

对于新的96 DPI速递:

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 Console:

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

对于Consolas达到96 DPI:

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返回的边距略有不同。目视检查它们似乎EM_GETRECT会产生更正确的结果。

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

您似乎正在使用Consolas并获得默认边距。