我目前正在尝试在我的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嵌入其中?
先谢谢, 马特
答案 0 :(得分:7)
这很烦人,但是无法根据需要自动创建编辑控件或隐藏其滚动条。你必须自己做。您可以继承Edit控件并根据需要调用ShowScrollBar
以响应影响大小或文本的各种窗口消息和通知(WM_SETTEXT
,WM_SETFONT
,WM_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中执行此操作)
当您绝对需要显示和隐藏滚动条时,您唯一的选择是通过代码执行此操作。您需要重载油漆以计算是否需要滚动以及是否需要显示它们。就这些工作而言,我通常会在编辑中隐藏滚动条,并创建两个滚动条控件,我自己定位,初始化和完成所有操作。它有很多代码,所以在开始之前一定要确保它真的需要它。