В главном окне моего приложения много вещей, поэтому мне нужна вертикальная полоса прокрутки, чтобы вместить все в клиентской области. Я кодировал элемент управления полосы прокрутки, сообщения WM_VSCROLL, такие как SB_LINEDOWN, обрабатываются, и полоса прокрутки перемещается хорошо. Последняя часть состоит в том, чтобы заставить содержимое главного окна перемещаться вместе с большим пальцем полосы прокрутки, и это кажется мне сложной задачей. Это моя лучшая попытка:
int dy = -( CurrPos - si.nPos );
RECT rctMainWindowArea = { 0, 0, 1000, main_window.bottom };
ScrollWindowEx( hwndMainWindow, 0, dy,( CONST RECT * ) &rctMainWindowArea,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
UpdateWindow( hwndMainWindow );
Это работает, пока я прокручиваю вниз. Когда я снова прокручиваю вверх, все запутывается. Я некоторое время гуглял по этой проблеме, и мне кажется, что мне нужно перерисовать потерянную клиентскую область главного окна. Однако я понятия не имею, как это сделать. Я нашел в Интернете только примеры, когда текст прокручивается в редакторе. Мне нужно прокрутить все основное окно, в котором есть несколько различных базовых элементов управления, некоторые графические элементы bmp, некоторые другие графические элементы, такие как TextOut (), RoundRect () и т. Д.
Мне нужны примеры кода, как решить мою проблему или хотя бы простое объяснение (я программист-любитель). Большое спасибо!