[Win32] Comment combiner status bar et scroll bar ? [Résolu]

Messages postés
6
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
7 octobre 2015
- - Dernière réponse : cs_beausoleil
Messages postés
6
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
7 octobre 2015
- 30 nov. 2006 à 08:49
Bonjour à tous,

Voilà mon problème : je cherche à créer une fenêtre possédant à la fois une barre d'état et des barres de défilement.

Je crée ma fenêtre ainsi :
hWnd = CreateWindowEx( WS_EX_APPWINDOW, "ab_class", "ab_app",
        WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
        NULL, NULL, hInstance, NULL ) ;

(notez WS_VSCROLL | WS_HSCROLL qui me permettent d'avoir les scroll bars)

et j'ajoute la barre d'état :
  hWndStatus = CreateWindowEx( 0, STATUSCLASSNAME, "status en cours",
                              WS_CHILD | WS_VISIBLE,
                              0, 0, 0, 0,
                               hWnd, 0, hInstance, NULL);

Le problème est qu'alors la barre de status se trouve insérée dans la zone client (comme marqué dans la doc, ce n'est pas le problème) mais du coup, elle est placée AU DESSUS de la scroll bar horizontale du bas !!!

Comment faire pour placer ma barre d'état tout en bas de la fenêtre :
- faut-il renoncer aux propriétés WS_VSCROLL | WS_HSCROLL, puis insérer des scroll bar manuellement et gérer leur positionnement ?
- ou peut-on créer une "fenêtre intermédiaire" comportant les propriétés WS_VSCROLL | WS_HSCROLL, insérée dans la zone client de la fenêtre principale, qui elle ne comportera alors que la barre de status ?
- ou autre chose...???

J'ai bien tenté la seconde solution, mais je n'arrive à créer de fenêtre intermédiaire...

Merci à vous, déjà si vous êtes arrivé jusque là , et surtout si vous avez un moment à consacrer à mon problème.

Christophe
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
3
Merci
La solution que je préfère:
Une fenêtre globale qui contient:
  - 1 fenêtre qui a la ScrollBar (donc qui aussi le style WS_CHILD)
  - 1 status bar

hWnd = CreateWindowEx( WS_EX_APPWINDOW, "ab_class", "ab_app",
        WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
        NULL, NULL, hInstance, NULL ) ;

hWndScroll = CreateWindowEx( 0, "???", "status en cours",
                              WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL,
                              0, 0, 0, 0,
                               hWnd, 0, hInstance, NULL);

hWndStatus = CreateWindowEx( 0, STATUSCLASSNAME, "status en cours",
                              WS_CHILD | WS_VISIBLE,
                              0, 0, 0, 0,
                               hWnd, 0, hInstance, NULL);

Quand hWnd recoit un WM_SIZE, tu redimensionnes hWndScroll et hWndStatus

_____________________________________

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 136 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vecchio56
Messages postés
6
Date d'inscription
jeudi 27 janvier 2005
Statut
Membre
Dernière intervention
7 octobre 2015
0
Merci
Hum, merci beaucoup !!!

J'ai dû "bricoler" un peu pour y arriver, mais j'ai fini par obtenir quelque chose, y compris sur des fenêtres filles type MDI. Je dois encore améliorer la gestion des messages, car ma fenêtre ne s'affiche pas bien au départ, mais ce ne doit pas être grand chose à priori.

Encore merci pour ta réponse, aussi rapide que pertinente !!! Je profite aussi de l'occasion pour dire bravo et merci pour ce site d'une telle richesse.

A+

Christophe
Commenter la réponse de cs_beausoleil