Элемент управления редактированием Windows 7, вертикальная прокрутка не работает

У меня есть приложение, которое компилируется нормально (mingw) и работает нормально, однако созданный элемент редактирования имеет полосы прокрутки, но вертикальная полоса прокрутки ничего не делает. Этот же исполняемый файл отлично работает на WinXP. Кроме того, в элементе управления редактирования есть как вертикальные, так и горизонтальные полосы прокрутки, горизонтальная работает нормально, а вертикальная - нет. Вертикальная полоса прокрутки видна и активна, но ничего не происходит ...

При создании элемента редактирования используется следующий код:

HWND hwndEdit = CreateWindow(TEXT("EDIT"), TEXT("Edit control"),
    WS_OVERLAPPED | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_LEFT | ES_MULTILINE |
    ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_SIZEBOX,
    1000, 480, 400, 500, NULL, 0, GetModuleHandle(NULL), NULL);
SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM) TEXT("")); 
SendMessage(hwndEdit, EM_LIMITTEXT, 0, 0);

Следующий код многократно используется для добавления текста в поле редактирования:

char test[] = "test";
SendMessage(hWndDbg, EM_SETSEL, 0x7FFFFFFF, 0x7FFFFFFF); // Undo any selection and move to end.
SendMessage(hWndDbg, EM_REPLACESEL, 0, (LPARAM) temp);

person Jesse    schedule 24.08.2011    source источник


Ответы (3)


Наконец нашел исправление. Кажется, что в WinXP элементу редактирования не обязательно должно быть определено родительское окно, в Win7 это требуется для работы вертикальной полосы прокрутки, горизонтальная полоса прокрутки работает в Win7 даже без определенного родительского окна.

person Jesse    schedule 18.09.2011

Обратите внимание, что вертикальные полосы прокрутки имеют смысл даже для однострочных элементов управления редактированием. В этом случае должен быть установлен WM_VSCROLL, а ES_AUTOVSCROLL - нет. (EM_AUTOVSCROLL означает EM_AutoHIDEVScroll.) Альтернативный элемент управления UpDown требует больше программных усилий, чем захват сообщений VM_VSROLL и последующее изменение (обычно числового) значения внутри элемента управления редактированием.

К сожалению, встроенный редактор ресурсов MS Visual Studio не позволяет добавлять WM_VSROLL в однострочные правки! Вы должны сделать это, добавив этот бит, отредактировав файл .RC в текстовом режиме. Подобно тому факту, что этот редактор ресурсов не позволяет вам добавлять текст по умолчанию в элемент управления, который по-прежнему поддерживается загрузчиком ресурсов.

person Henrik Haftmann    schedule 01.08.2012
comment
Не путайте префиксы WM_ и WS_, EM_ и ES_. ES_AUTOVSCROLL не имеет ничего общего с скрытием или отображением полосы прокрутки. - person Dmitriy Yurchenko; 24.09.2012

Используйте GetDesktopWindow () в качестве параметра hWndParent. Работает на Win7.

person Dmitriy Yurchenko    schedule 24.09.2012