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);

3 ответа

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

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

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

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

Другие вопросы по тегам