如何在编辑控件上自动隐藏滚动条

时间:2013-08-09 10:12:17

标签: c++ winapi textbox

我目前正在尝试在我的Win32应用程序中创建一个EDIT控件(http://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx),但遗憾的是,当它不使用时,我无法让Vertical Scroll Bar消失。

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

WS_CHILD | ES_MULTILINE | ES_WANTRETURN | WS_VISIBLE | WS_VSCROLL | ES_AUTOVSCROLL

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

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

先谢谢, 马特

3 个答案:

答案 0 :(得分:7)

这很烦人,但是无法根据需要自动创建编辑控件或隐藏其滚动条。你必须自己做。您可以继承Edit控件并根据需要调用ShowScrollBar以响应影响大小或文本的各种窗口消息和通知(WM_SETTEXTWM_SETFONTWM_SIZE和{ {1}}是我能想到的显而易见的事实。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

Win32中的简短回答只有样式更改才能实现。

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

当您绝对需要显示和隐藏滚动条时,您唯一的选择是通过代码执行此操作。您需要重载油漆以计算是否需要滚动以及是否需要显示它们。就这些工作而言,我通常会在编辑中隐藏滚动条,并创建两个滚动条控件,我自己定位,初始化和完成所有操作。它有很多代码,所以在开始之前一定要确保它真的需要它。