begin process at 2012 05 29 06:00:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

Fenêtre comme formulaire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fenêtre comme formulaire

jeudi 21 juillet 2011 à 19:44:19 | Fenêtre comme formulaire

ArthurAuguste

Membre Club
Bonjour,
Je cherche à faire en C/C++ une fenêtre en 3 parties (comme un formulaire avec une entête, le corps de la fenêtre et un pied) y a-t-il une solution standard pour faire ceci ?
- 1.- J'ai pensé à faire une fenêtre mère avec à l'intérieur 3 fenêtres filles sans titre qui se juxtaposent
- 2.- J'ai pensé à une seule fenêtre avec comme entête et comme pied de fenêtre un contrôle statique de hauteur suffisante et ayant comme largeur la largeur totale de la fenêtre (à tenir à jour en fonction des redimensionnements)
- 3.- J'ai pensé à utiliser comme entête une tool barre et comme pied une status barre.
Dans la solution 2, je me demande si c'est gérable dans la mesure où dans l'entête j'aurai aussi des boutons, ce qui revient à superposer des contrôles
Dans la solution 3, l'avantage c'est que le redimensionnement en largeur est facile, par contre, il ne me semble pas que je sois maître de la hauteur, ni de la forme des boutons que je veux y mettre (prévu pour des onglets) et je ne vois pas comment gérer la couleur du fond, ni du texte de la toolbar ou de la status barre.
A votre avis quelle est la moins mauvaise solution, où en existe-t-il une 4ème plus standard pour ce genre de problème ?
jeudi 21 juillet 2011 à 22:29:43 | Re : Fenêtre comme formulaire

buno

Administrateur CodeS-SourceS
Hello,
Réponse 2.
1. C'est à oublier: inutile d'aller s'embêter avec des sous-fenêtres
3. Effectivement, tu n'as pas la main sur la hauteur de la toolbar (qui est sensé afficher des "outils") ni de la statusbar (qui est là pour afficher l'état courant de l'appli)

En fait, ce n'est ni plus ni moins qu'une fenêtre classique avec des composants dessus


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
vendredi 22 juillet 2011 à 09:19:13 | Re : Fenêtre comme formulaire

ArthurAuguste

Membre Club
Merci pour la réponse, effectivement la solution 2 paraît plus simple sauf que je n'ai pas testé si je pouvais superposer des boutons sur le contrôle statique qui me servirait de header et si c'est gérable de modifier la taille de ce contrôle statique servant de header ainsi que le cadrage du texte chaque fois que l'utilisateur redimensionne la fenêtre.
Entre-temps j'ai continué à chercher et j'ai trouvé une 4ème solution avec WC_HEADER (le header control), j'ai commencé à tester et j'ai vu qu'avec ça je pouvais régler à loisir la hauteur du header. Maintenant, je n'ai pas encore trouvé comment forcer la couleur de ce contrôle, du texte et du fond que je suis sensé y insérer et comment y introduire des boutons. Je ne sais pas non plus encore s'il existe un équivalent "footer" pour le bas de fenêtre ou si on doit se resservir du header en modifiant son implantation ?
As-tu un avis sur cette 4ème solution ?
Merci
vendredi 22 juillet 2011 à 09:56:27 | Re : Fenêtre comme formulaire

buno

Administrateur CodeS-SourceS
Tiens, je ne connais pas le "header control". Mais, à mon avis, ta nouvelle solution n'est qu'une "surcouche" de la 2e. Avec la 2e, tu as la main sur tout et tu fais ce que tu veux: resize, superposition,...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
vendredi 22 juillet 2011 à 22:52:37 | Re : Fenêtre comme formulaire

ArthurAuguste

Membre Club
Salut
Bon, entre-temps j'ai approfondi le header control, voilà ce que j'ai fait.
1.- J'ai créé un header control par hheader=CreateWindow(WC_HEADER,...) pas de problème
2.- J'ai récupéré sa taille par SendMessage(hheader, HDM_LAYOUT...) pas de problème
3.- J'ai modifié sa taille par SetWindowPos(hheader,...) pas de problème
4.- J'ai modifié la couleur de fond du header par SetClassLong(hheader, GCL_HBRBACKGROUND,...) pas de problème
5.- J'ai créé un contrôle statique (du texte) à l'intérieur du header comme contrôle enfant du header. pas de problème
6.- J'ai créé un bouton à l'intérieur du header comme contrôle enfant du header. pas de problème.
7.-Comme je veux en plus gérer la police du texte, sa couleur et son fond, gérer la forme et la couleur du bouton, j'ai sous-classé la WindowProc du header par SetWindowLong(hheader, GWL_WNDPROC...).
Dans la procédure de sous-classement, je récupère le message WM_DRAWITEM sous lequel je change la couleur du texte, du bouton, etc... pas de problème
8.- comme je veux récupérer la main dans la fenêtre mère du header quand l'utilisateur clique sur le bouton, je profite de la procédure de sous-classement pour y tester aussi le message WM_COMMAND associé à l'identificateur du bouton et si c'est le cas j'envoie un message WM_NOTIFY avec les codes appropriés à la fenêtre parente. Pas de problème: quand l'utilisateur clique sur le bouton qui est un enfant du header, je récupère bien la main au niveau du message WM_NOTIFY de la fenêtre parente du header.
A noter que je n'ai pas de WM_PAINT à gérer, j'ajuste juste la largeur du header à celle de sa fenêtre mère lors du message WM_SIZE.

Donc tout baigne,

Il me reste à tester un footer, je pense que je dois pouvoir soit utiliser la statusbar en la sous-classant éventuellement aussi pour gérer la couleur du texte que je veux y mettre dedans, soit un autre header control, je n'ai pas testé mais si on peut modifier sa taille, on doit pouvoir aussi modifier son implantation pour le positionner en fin de fenêtre, soit encore la solution 2.

En fait, le header control n'est pas à l'origine exactement prévu pour cette utilisation, il est prévu pour mettre des titres aux colonnes qui sont en dessous comme ça existe par exemple dans l'explorateur et lorsqu'on clique sur le titre de la colonne ça trie les données qui sont en dessous selon le critère du titre (par exemple: "nom" ou "date de modification", etc...).
Maintenant, il va me falloir choisir une solution en fait il y en avait même une 5ème qui consistait simplement à peindre un rectangle de couleur différente à l'emplacement du header, mais là il faut gérer le WM_PAINT.
Merci pour tes conseils.
samedi 23 juillet 2011 à 13:40:02 | Re : Fenêtre comme formulaire

buno

Administrateur CodeS-SourceS
Je constate que tu t'en sors très bien...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...


Cette discussion est classée dans : solution, formulaire, fenêtre, pied, entête


Répondre à ce message

Sujets en rapport avec ce message

appeler une autre fenêtre [ par harbat ] comment puis-je appeler un autre formulaire en utilisant le visual C++(j'utilise les MFC)merci de me répondre a la question le plutot possible Effaçage de fenêtre [ par denis28 ] Comment effacer le contenu d'une fenêtre win32 avec visual c++? Je cherche l'équivalent du clrscr() du mode console.Merci création de fenêtre enfant [ par polykos ] quelqu'un saurait me dire pour quoi lorsque avec CreateWindow, j'indique en tant que style WS_CHILD, j'obtiens une feêtre enfant mais inactive ???!! Comment afficher du texte dans un fenêtre OpenGl?? [ par mastave ] Comment afficher du texte dans un fenêtre OpenGl??Et avec un police spéciale?? Fenêtre windows... [ par ELECTRORESiSTiK ] Salut,Je suis debutant en Visual C++ et je n'arrive pas à créer ce que je veux faire...Je voudrais créer une fenêtre windows ( Form ) avec 2 edit box Créer un lien sous fenêtre windows [ par JMGR ] Comment peut - on créer un lien vers un site sous une fenêtre Windows ?(avec les MFC par ex.)a+ Fenêtre pas carrée ... [ par Ostrogoth22 ] Comment créer une fenètre de forme ronde , ou n'importe quelle formeEG : la fenetre d'intro de icq, ou copernic .. A tous les pros du C++ / POO [ par Kezal ] Salut,J'ai un leger problème et j'aimerais y trouver une solution, alors je viens demander conseil ici ;)Alors voila, j'ai une classe :class CEngine{p inserer une fenêtre opengl dans une autre fenetre [ par 20100 ] je cherche à inserer un programme que j'ai fait avec opengl dans une fenêtre windows classique(avec des boutons ...)pour l'instant tout marche mais da Rafraichissement des dialog [ par JeriKo ] salut a tous,j'ai fait un prog avec boite de dialogue, le probleme etant que j'ai une boucle et du coup faut rafraichir la fenetre pour pouvoir utilis


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales