3

我目前正在尝试在我的 Win32 应用程序中创建一个编辑控件(http://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx),但遗憾的是,我不能让垂直滚动条在不使用时消失。

我现在正在使用这种风格:

WS_CHILD | ES_MULTILINE | ES_WANTRETURN | WS_VISIBLE | WS_VSCROLL | ES_AUTOVSCROLL

这将显示滚动条,但即使不需要,它也会永久可见。理想情况下,我希望这个栏在不需要时隐藏(即 - 当文本适合控件时)

是否有我缺少的样式或者我需要使用 Scrolls 创建一个单独的控件,然后将 EDIT 嵌入其中?

提前致谢,马特

4

3 回答 3

10

这很烦人,但无法根据需要自动使 Edit 控件显示或隐藏其滚动条。你必须自己做。您可以根据需要对 Edit 控件进行子类化并调用,以响应影响大小或文本的各种窗口消息和ShowScrollBar通知(我能想到的显而易见的消息和通知)。WM_SETTEXTWM_SETFONTWM_SIZEEN_CHANGE

于 2013-08-09T10:35:12.347 回答
5

标准EDIT控件不支持自动显示/隐藏滚动条。RICHEDIT但是,如果您不指定ES_DISABLENOSCROLL样式,标准控件会这样做。

于 2013-08-09T19:55:45.950 回答
2

Win32 中的简短答案仅靠样式更改是不可能的。

即使使用 MFC,它也没有集成,因为显示和隐藏的滚动条会更改客户端矩形,并且您需要计算内容大小以检测何时显示/隐藏滚动条。(链接到 codeguru 如何在 MFC 中执行此操作http://www.codeguru.com/cpp/controls/editctrl/article.php/c3917/Multiline-Edit-Box-with-Automatic-Scroll-Bar-Display.htm

当您绝对需要显示和隐藏滚动条时,您唯一的选择就是通过代码来实现。您将需要重载绘画来计算是否需要滚动以及是否需要显示它们。就个人而言,我通常在编辑中隐藏滚动条,并创建两个滚动条控件,我自己定位、初始化和做所有事情。这是很多行代码,所以在开始之前确保你真的需要它。

于 2013-08-09T10:55:40.517 回答