Как Автоматически Скрыть Полосы Прокрутки На Элементе Управления Редактированием



В настоящее время я пытаюсь создать элемент управления редактированием (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


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



Есть ли стиль, которого мне не хватает, или мне нужно создать отдельный элемент управления со свитками, а затем встроить в него редактирование?



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

482   3  

3 ответов:

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

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

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

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

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

Comments

    Ничего не найдено.