Bonjour
J'ai une fenetre mère (hWndMainFrame), qui contient une fenetre fille (hWndScroll) avec un objet scroll à coté (hscr).
Tout se passe bien, tant que la fenetre mère ne change pas de taille (via WM_SIZE) et que je ne touche pas au scroll
j'ai un cas particulier, qui ne fait pas ce que je voudrais :
1) affichage de la fenetre principale et des fenetres filles
2) reduction de la taille de la fenetre principale
3) je met le curseur du scroll tout en bas
jusqu'ici l'affichage est correct (du moins il semble correct)
4) agrandissement de la fenetre principale par le haut de la fenetre, jusqu'au depassement de la taille de la fenetre fille (ici 600)
et là, la fenetre fille n'est pas entierement affichée

d'ailleurs pendant l'agrandissement, le scroll semble bizarre ...
Merci de me dire, ce que j'ai oublié ou mal codé
ci-dessous la partie du code gérant le scroll:
=======================
void Update_Scroll(HWND m_hWnd, HWND hscr)
{
// taille zone cliente
RECT rcClient;
GetClientRect(m_hWnd, &rcClient);
int cyClient = rcClient.bottom - rcClient.top;
int Taille_objet_y = 600;
// si la taille de la fenetre est superieure à celle à scroller
if(cyClient >= Taille_objet_y)
cyClient = Taille_objet_y;
//--------------------------------------------------------------------------
// infos pour les scrollbars
SCROLLINFO info;
info.cbSize = sizeof(SCROLLINFO);
// scrollbar vertical
info.nMin = 0;
info.nMax = Taille_objet_y - 2;
info.nPage = cyClient-1;
info.fMask = SIF_RANGE | SIF_PAGE;// | SIF_DISABLENOSCROLL;
SetScrollInfo(hscr, SB_CTL, &info, TRUE);
}
void On_VScroll (HWND hWndScroll, HWND hscr, WPARAM wParam)
{
// récupération infos sur le scrollbar
SCROLLINFO info;
info.cbSize = sizeof(SCROLLINFO);
info.fMask = SIF_ALL;
GetScrollInfo(hscr, SB_CTL, &info);
int y = info.nPos;
// en fonction de l'action à effectuer
int nSBCode = LOWORD(wParam);
switch(nSBCode)
{
case SB_LINEDOWN : y++; break;
case SB_LINEUP : y--; break;
case SB_PAGEDOWN : y += info.nPage; break;
case SB_PAGEUP : y -= info.nPage; break;
case SB_THUMBTRACK : y = info.nTrackPos; break;
case SB_THUMBPOSITION : y = info.nPos; break;
}
// vérif bornes
if(y > info.nMax)
y = info.nMax;
if(y < info.nMin)
y = info.nMin;
// affectation nouvelle position, on scrolle la vue
SetScrollPos(hscr, SB_CTL, y, TRUE);
ScrollWindow(hWndScroll, 0, (info.nPos - GetScrollPos(hscr, SB_CTL)), NULL, NULL);
}
case WM_CREATE:
Update_Scroll(hscr, hWndScroll);
break;
case WM_SIZE:
GetClientRect(hWndMainFrame, &rctMainWnd);
// redimensionnement de la fenetre à scroller en fonction de la taille de la fenetre mere
SetWindowPos(hWndScroll, HWND_TOP, 5,50, rctMainWnd.right-30, rctMainWnd.bottom-60, SWP_NOACTIVATE | SWP_NOOWNERZORDER);
UpdateWindow(hWndScroll);
// maj du scroll
Update_Scroll(hscr, hWndScroll);
On_VScroll (hWndScroll, hscr, wParam);
break;
case WM_VSCROLL:
On_VScroll (hWndScroll, hscr, wParam);
break;
===================================