Полосы прокрутки Win32 Edit не работают в Windows 10

В настоящее время я пытаюсь реализовать некоторые полосы прокрутки в элементе управления Win32, но они просто не работают при установке флага WS_HSCROLL.

то, что не работает

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

Чтобы добавить горизонтальную полосу прокрутки, используйте стиль WS_HSCROLL; чтобы добавить вертикальную полосу прокрутки, используйте стиль WS_VSCROLL. Элемент редактирования с полосами прокрутки обрабатывает собственные сообщения полосы прокрутки. Источник

Но по какой-то причине прокрутка не двигается, и если вы попытаетесь переместить ее вручную, она просто вернет квадрат в исходное положение без каких-либо движений.

Вот пример кода:

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR pStr, int nCmd)
{
    WNDCLASS wcx = { 0 };
    wcx.lpfnWndProc = DefWindowProc;
    wcx.hInstance = hInst;
    wcx.hCursor = LoadCursor(0, IDC_ARROW);
    wcx.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1);
    wcx.lpszClassName = L"SIMPLEWND";
    RegisterClass(&wcx);

    int desktopwidth = GetSystemMetrics(SM_CXSCREEN);
    int desktopheight = GetSystemMetrics(SM_CYSCREEN);
    HWND hwnd = CreateWindowEx(0, L"SIMPLEWND", L"Main Window", WS_OVERLAPPEDWINDOW,
        desktopwidth / 4, desktopheight / 4, desktopwidth / 2, desktopheight / 2, 0, 0, hInst, 0);
    CreateWindow(L"edit", L"placeholder", WS_CHILD | WS_VISIBLE | WS_BORDER
        | WS_HSCROLL | ES_AUTOHSCROLL, 10, 10, 200, 90, hwnd, (HMENU)1, hInst, 0);

    ShowWindow(hwnd, nCmd);
    MSG msg;
    while (GetMessage(&msg, 0, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

Я также попытался удалить ES_AUTOHSCROLL, потому что я прочитал, что полоса прокрутки перестает работать, когда этот стиль установлен, но ничего не меняется (просто вы больше не можете прокручивать прямоугольник управления)


person Onelio    schedule 05.02.2021    source источник


Ответы (1)


Починил это! Похоже, обе полосы прокрутки работают, только если определено ES_MULTILINE.

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

person Onelio    schedule 05.02.2021
comment
Прокрутка действительно работает и в однострочных ES_AUTOHSCROLL элементах редактирования с выравниванием по левому краю, как указано в документы. - person dxiv; 06.02.2021
comment
Да, но полосы прокрутки в применении не работают. Это то, что я хотел - person Onelio; 06.02.2021