mogwai93
Messages postés362Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention 4 novembre 2023
-
17 août 2006 à 08:06
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 2012
-
18 août 2006 à 21:47
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
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 17 août 2006 à 19:00
Salut,
J'ai pas de réponse précise a ton problème, mais quelques commentaires:
Je pense que tu ne devrais pas utiliser ScrollWindow()
systematiquement. Dans certains cas il est utile (SB_LINEDOWN,
SB_LINEUP..) mais pas dans d'autres. De plus si tu te plante dans le
calcul de la valeur à scroller, ca affichera vraiment n'importe quoi.
Tant que tu debug ton code, je pense qu'il vaut mieux que tu utilises
InvalidateRect() pour redessiner toute la fenetre, et ainsi voir si
tout est positionné correctement. Ensuite quand ca fonctionnera, tu
pourra remettre ScrollWindow().
Le calcul de la position maximum ne me semble pas bon. Il faut prendre
en compte la valeur de nPage lors de ce calcul. C'est plutot:
mogwai93
Messages postés362Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention 4 novembre 2023 18 août 2006 à 06:55
c'est bien la fonction ScrollWindow qui me pose problème, car en la
commentant et en mettant InvalidateRect, le scrollbar se comporte
correctement et l'affichage aussi...
"Le calcul de la position maximum ne me semble pas bon. Il faut prendre
en compte la valeur de nPage lors de ce calcul. C'est plutot:
nPos = nMax - (nPage - 1)"
--> nPos, c'est la position du curseur du scroll, pas la position maximum ?!