Рассмотрим следующий частичный код. Моя проблема в том, что полоса прокрутки не выровнена с прямоугольником. Я получаю прямоугольник и полосу прокрутки с большим промежутком между ними. Я подумал, что могу поэкспериментировать и выяснить, что такое «смещение», и просто вставить это, но я хотел бы понять, почему полоса прокрутки, по-видимому, не соответствует координатам.
hCDC = GetDC(hCWnd);
bkgBrush = CreateSolidBrush( BGColor );
SetMapMode( hCDC, MM_TEXT );
SelectObject( hCDC, bkgBrush );
Rectangle(hCDC, VTRect->left, VTRect->top, VTRect->right, VTRect->bottom);
iHThumb = GetSystemMetrics(SM_CXHTHUMB);
iVThumb = GetSystemMetrics(SM_CYVTHUMB);
hInstance = NULL;
if( hWndVertScroll )
DestroyWindow( hWndVertScroll );
hWndVertScroll = CreateWindow(
"Scrollbar",
(LPSTR)NULL,
WS_CHILD | WS_VISIBLE | SBS_VERT | SBS_RIGHTALIGN,
VTRect->left,VTRect->top,VTRect->right,VTRect->bottom-iVThumb ,
hCWnd,
NULL,
hInstance,
NULL);
Чтобы исправить разрыв, я бы вызвал вызов CreateWindow, используя следующее:
hWndVertScroll = CreateWindow(
"Scrollbar",
(LPSTR)NULL,
WS_CHILD | WS_VISIBLE | SBS_VERT | SBS_RIGHTALIGN,
VTRect->left,VTRect->top,VTRect->right - 100 ,VTRect->bottom-iVThumb ,
hCWnd,
NULL,
hInstance,
NULL);
но я не понимаю, почему VTRect-> right - 100 требуется, чтобы полоса прокрутки была направлена вверх по правой стороне прямоугольника. Обратите внимание, что я попробовал VTRect-> right - iHThumb, но у меня все еще есть разрыв, хотя и меньший.
Снимок экрана с красным прямоугольником и полосой прокрутки и разрывом между ними: