Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ascenseur vertical

3 réponses
Avatar
Roger
Bonjour,
Me voici encore avec mes questions tordues:
Je voudrais que l'ascenseur vertical apparaisse lorsque ma fenêtre est trop
petite pour afficher tout le contenu et que je puisse ainsi la faire
défiler.
Problème, a priori simple, sauf que dans mon cas, désolé, plusieurs petites
complications:
1.- Ma fenêtre que nous appellerons F sur laquelle je veux l'ascenseur est
une parmi n de mes fenêtres filles
2.- Ma fenêtre F a en plus un header contrôle que nous appellerons H, la
logique voudrait que si le défilement de F fonctionnait, elle devrait
glisser vers le haut sous H;
3.- La fenêtre parente de ma fenêtre F est une MDICLIENT qui est elle-même
fenêtre fille de ma fenêtre principale que nous appellerons MAIN
Les ascenseurs apparaissent normalement dès que nécessaire sur MAIN, par
contre par défaut aucun ascenseur n'apparaît sur F, même lorsque ça serait
nécessaire, je peux quand même voir les infos cachés en tirant sur la
fenêtre F pour l'agrandir.
Si je force un ascenseur vertical avec WS_VSCROLL, il apparaît bien mais il
est inefficace, je peux le baisser en tirant dessus, mais la fenêtre ne
défile pas et l'ascenseur se comporte comme un élastique, dès que je le
lâche il revient à son point de repos.
Styles de F dans WNDCLASS: CS_VREDRAW | CS_HREDRAW
F créée avec CreateWindowEx et les paramètres: WS_EX_CLIENTEDGE |
WS_EX_MDICHILD puis: WS_CHILD |WS_CAPTION | WS_VISIBLE | WS_OVERLAPPEDWINDOW
| WS_VSCROLL
H créé avec CreateWindow(WC_HEADER, NULL puis: WS_CHILD | WS_VISIBLE etc...
Merci

3 réponses

Avatar
Jean-Christophe
"Roger"

Si je force un ascenseur vertical avec WS_VSCROLL, il apparaît bien mais
il est inefficace, je peux le baisser en tirant dessus, mais la fenêtre ne
défile pas et l'ascenseur se comporte comme un élastique, dès que je le
lâche il revient à son point de repos.



N'est-ce pas à ton programme d'intercepter les
messages SB_XXX en provenance de la scroll bar ?

J'ai un truc de ce genre dans un de mes softs :

switch( message )
{
case WM_VSCROLL: // scroll bar is being moved
switch( (int)LOWORD(wParam) ) // which move is it ?
{
case SB_LINEUP: d -= (x > d) ? d:x; break;
case SB_LINEDOWN: d += (d+x > P->dwMemSize)? P->dwMemSize-d:x;
break;
case SB_PAGEUP: d -= (y-x <= d) ? y-x:d; break;
case SB_PAGEDOWN: d += (d+y-x < P->dwMemSize) ? y-x:P->dwMemSize-d;
break;
case SB_TOP: d = 0; break;
case SB_BOTTOM: d = P->dwMemSize - 1; break;
case SB_THUMBTRACK: d = ((DWORD)(HIWORD(wParam))) << P->nSh;
default: break;
}
return 0;

// etc ...
Avatar
Christian ASTOR
Roger a écrit :
Bonjour,
Me voici encore avec mes questions tordues:
Je voudrais que l'ascenseur vertical apparaisse lorsque ma fenêtre est trop
petite pour afficher tout le contenu et que je puisse ainsi la faire
défiler.



Voir les exemples du Petzold sur la gestion de WM_VSCROLL
comme SYSMETS2.C par exemple
Avatar
Roger
Merci pour vos infos, je vais suivre vos conseils et voir ça.
@+