考虑以下部分代码。我的问题是滚动条没有与矩形对齐。我得到一个矩形和一个滚动条,两者之间有很大的差距。我想我可以尝试并找出“偏移”是什么,然后把它放进去但我想知道为什么滚动条显然似乎不尊重坐标。
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->对 - iHThumb,但我仍然有一个差距,虽然是一个较小的。
红色矩形和滚动条的屏幕截图以及两者之间的差距:
答案 0 :(得分:0)
VTRect-> left,VTRect-> top,VTRect-> right - 100,VTRect-> bottom-iVThumb
使用这些值传递给CreateWindow()的参数是x,y, nWidth 和 nHeight 。宽度和高度,不是右边和底部。修正:
VTRect-> left,VTRect-> top,VTRect-> right - VTRect-> left,VTRect-> bottom - VTRect-> top