2010-12-04 42 views
0

Considérez le code partiel suivant. Mon problème est que la barre de défilement n'est pas alignée avec le rectangle. Je reçois un rectangle et une barre de défilement avec un grand écart entre les deux. J'ai pensé que je pourrais expérimenter et découvrir ce qu'est le "décalage" et juste mettre cela, mais je voudrais comprendre pourquoi la barre de défilement ne semble apparemment pas honorer les coordonnées.CreateWindow Problème d'alignement de la barre de défilement

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); 

Pour corriger l'écart, j'invoque l'appel CreateWindow en utilisant les éléments suivants:

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); 

mais je ne comprends pas pourquoi VTRect-> droit - 100 est nécessaire pour, mais le défilement barre contre le côté droit du rectangle. Notez que j'ai essayé VTRect-> right-iHThumb mais j'ai encore un écart, quoique plus petit.

Capture d'écran du rectangle rouge et barre de défilement et l'écart entre les deux:

alt text

Répondre

0

VTRect-> gauche, VTRect-> top, VTRect-> droite - 100, VTRect-> bottom-iVThumb

Les arguments vous passez à CreateWindow() avec ces valeurs sont x, y, nWidth et nHeight. Largeur et hauteur, pas droit et bas. Correction:

VTRect-> gauche, VTRect-> top, VTRect-> droite - VTRect-> gauche, VTRect-> bas - VTRect-> top