次の部分的なコードを検討してください。私の問題は、スクロールバーが長方形に整列していないことです。長方形とスクロールバーの間に大きなギャップがあります。実験して「オフセット」が何であるかを調べて、それを入れるだけでよいと思いましたが、スクロールバーが明らかに座標を尊重していないように見える理由を理解したいと思います。
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 が必要なのか理解できませんが、スクロールバーは Rectangle の右側にあります。VTRect->right - iHThumb を試してみましたが、ギャップは小さいものの、まだギャップがあることに注意してください。
赤い四角形とスクロールバー、および 2 つの間のギャップのスクリーン ショット: