WS_VSCROLL, стиль CreateWindow работает, SetWindowLong нет - PullRequest
4 голосов
/ 13 ноября 2008

Когда я делаю

wnd = CreateWindow("EDIT", 0,
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | 
    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN,
    x, y, w, h,
    parentWnd,
    NULL, NULL, NULL);

все хорошо, однако, если я удаляю WS_VSCROLL и WS_HSCROLL, а затем делаю следующее, я не получаю их, поэтому у меня неправильное окно Зачем? Мало того, что я получаю неправильное окно, оно неприменимо, если отсутствуют оба WS_VSCROLL и WS_HSCROLL

style = WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE |
    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN;
SetWindowLong(wnd, GWL_STYLE, style);

Ответы [ 2 ]

8 голосов
/ 13 ноября 2008

Некоторые стили управления не могут быть изменены после создания окна. Стиль ES_AUTOHSCROLL (который по сути контролирует перенос слов) является одним из них; это указано (несколько косвенно) в разделе MSDN Редактировать стили управления . Вы можете установить биты с помощью SetWindowLong (), но элемент управления будет либо игнорировать их, либо вести себя беспорядочно.

Единственный способ сделать это чисто - воссоздать элемент управления редактирования, используя необходимые стили. Именно это и делает Блокнот, когда вы переключаете настройку «Перенос слов».

2 голосов
/ 19 марта 2011

Вы можете сделать это с помощью функции ShowScrollBar (). Вам также может быть интересна функция EnableScrollBar (), если вы хотите включить / отключить полосы прокрутки окна. С наилучшими пожеланиями.

...