Проблема выравнивания полосы прокрутки CreateWindow - PullRequest
0 голосов
/ 04 декабря 2010

Рассмотрим следующий частичный код. Моя проблема в том, что полоса прокрутки не выровнена с прямоугольником. Я получаю прямоугольник и полосу прокрутки с большим промежутком между ними. Я подумал, что могу поэкспериментировать и выяснить, что такое «смещение», и просто вставить это, но я хотел бы понять, почему полоса прокрутки, по-видимому, не соответствует координатам.

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, но у меня все еще есть разрыв, хотя и меньший.

Снимок экрана с красным прямоугольником и полосой прокрутки и разрывом между ними:

alt text

1 Ответ

0 голосов
/ 04 декабря 2010

VTRect-> left, VTRect-> top, VTRect-> right - 100, VTRect-> bottom-iVThumb

Аргументы, которые вы передаете CreateWindow () с этими значениями:x, y, nWidth и nHeight .Ширина и высота, а не справа и снизу.Исправить:

VTRect-> влево, VTRect-> вверху, VTRect-> вправо - VTRect-> влево, VTRect-> снизу - VTRect-> вверху

...