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