【问题标题】:Win32 - Is there a way to get the margin or border size around a scrollbar?Win32 - 有没有办法获得滚动条周围的边距或边框大小?
【发布时间】:2020-11-27 09:03:21
【问题描述】:

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

TIA!!

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

【问题讨论】:

  • 请在问题中添加必要的截图以及您想要完成什么样的工作。参考:How to create a Minimal, Reproducible Example
  • 添加图片以显示边框/边距区域。
  • 在我的记事本上,“j”将被放置在下一行,而不是被滚动条截断。这是一个很奇怪的现象。
  • 如题,无法回答,因为there are two types of scrollbars,我们不知道你用的是哪一个。
  • 你的图片没有多大意义....请再发一张

标签: winapi gdi


【解决方案1】:

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

对于 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 返回的边距略有不同。从视觉上看,EM_GETRECT 似乎产生了更正确的结果。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2022-01-24
    相关资源
    最近更新 更多