Как автоматически скрывать полосы прокрутки при редактировании элемента управления

В настоящее время я пытаюсь создать элемент управления EDIT (http://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx) в моем приложении Win32, но, к сожалению, я не могу заставить вертикальную полосу прокрутки исчезнуть, когда она не используется.

Я использую этот стиль в данный момент:

WS_CHILD | ES_MULTILINE | ES_WANTRETURN | WS_VISIBLE | WS_VSCROLL | ES_AUTOVSCROLL

Это покажет полосу прокрутки, но она будет постоянно видна, даже если не требуется. В идеале, я бы хотел, чтобы эта панель скрывалась, когда она не нужна (т.е. когда текст помещается на элемент управления)

Есть ли какой-то стиль, который мне не хватает, или мне нужно создать отдельный элемент управления с помощью Scrolls, а затем встроить в него ПРАВКУ?

Заранее спасибо,
Matt

2

Решение

Это раздражает, но нет никакого способа автоматически показывать элемент управления Edit или скрывать его полосу прокрутки по мере необходимости. Тебе придется сделать это самому. Вы можете создать подкласс элемента управления Edit и вызвать ShowScrollBar по мере необходимости в ответ на различные сообщения окна и уведомления, которые влияют на размер или текст (WM_SETTEXT, WM_SETFONT, WM_SIZE, а также EN_CHANGE очевидные, о которых я могу думать).

7

Другие решения

Стандарт EDIT Элемент управления не поддерживает автоматическое отображение / скрытие полос прокрутки. Тем не менее, стандарт RICHEDIT контроль, если вы не укажете ES_DISABLENOSCROLL стиль.

2

Короткий ответ в Win32 невозможен только с изменениями стиля.

Даже с MFC это не интегрировано, потому что полосы прокрутки, которые показывают и скрывают, изменяют прямоугольник клиента, и вам нужно вычислить размер контента, чтобы определить, когда показывать / скрывать полосы прокрутки. (Ссылка на codeguru, как это сделать в MFC http://www.codeguru.com/cpp/controls/editctrl/article.php/c3917/Multiline-Edit-Box-with-Automatic-Scroll-Bar-Display.htm )

Когда вам абсолютно необходимо показать и скрыть полосы прокрутки, единственный вариант — сделать это с помощью кода. Вам нужно будет перегрузить краску, чтобы рассчитать, нужны ли свитки или нет, и нужно ли их отображать или нет. Лично для такой работы я обычно скрываю полосы прокрутки в редактировании и создаю два элемента управления полосой прокрутки, которые я позиционирую, инициализирую и делаю все сам. Это много строк кода, поэтому убедитесь, что это действительно нужно, прежде чем начать.

1
По вопросам рекламы [email protected]