Reinitialiser l'ecran

Signaler
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
-
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
-
Bonjour a tous,
J'ai cherché sur le forum, sans succès ( beaucoup de solutions sont proposées pour application console, ce qui n'est pas mon cas)
Je programme en Win32 une appli pour Pocket PC. J'affiche un premier ecran avec différents controles (bouton, editbox,static ou lisbox) . Mais je voudrais que lorsque je clique sur un bouton, cela laisse mon appli ouverte, mais efface tous les controles, pour ensuite en recreer de nouveaux sur un ecran "vierge" ( et ainsi de suite, l'appli devant géré un certain nombre d'nchainement d'ecran...)

Je ne vois pas trop comment procéder, comme j'ai créé mes controle dans le WM_CREATE, où devrais-je ensuite créer les nouveaux? et comment effacer l'ecran actuel? ( pour l'instant j'ai tester en faisant des DestroyWindow, pas terrible ^^ ).

Voila, merci d'avance
Si je ne suis pas clair n'hesitez pas

6 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

Tu peux peut être jouer avec ShowWindow, qui prend peut prendre SW_HIDE et SW_SHOW en paramètre.

Y a CloseWindow aussi.

Mais je ne sait pas si ces deux fonctions marchent avec des contrôles.
                        
                
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Salut,
Merci pour ta réponse.
Je ne pense pas que ce soit ce qu'il me faut : closeWindow n'est pas reconnu ( pas mal de fonctions ne sont pas reconnue par Windows CE), quant à  showWindow est reconnu mais ne fait pas ce que je voudrais il me semble.

En fait, moi je voudrais qu'en fonction d'une action, cela me "vide" mon ecran, mais me laisse la fentre principal active, et qu'ensuite je puisse ajouter par exemple un bouton en plein milieu de cet ecran maintenant blanc...

Merci d'avance pour ceux qui auraient une idée...
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Bah je viens d'essayer ShowWindow sous XP : on peut effacer un bouton de la form.

Il suffit de passer le handle de fenêtre du bouton en question.

Si tu veux effacer plusieurs contrôles en même temp, ça devrait pouvoir se faire en les mettants dans une fenêtre de classe STATIC, et en donnant le handle de cette fenêtre à ShowWindow.
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Oki pas bete ^^
Comment tu les mets tous dans une fenetre static? ( je les ajoute tous dans ma fentre principale créée avec CreteWindow() )
Et comment ensuite recreer un nouveau controle, puisque pour le premier ecran je l'ai fait dans le WM_CREATE.
Merci je reteste !
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Pour placer dans un STATIC, il doit suffire de mettre le handle du STATIC dans le hWndParent du CreateWindow des différents contrôles d'une même page.

Donc dans ton WM_CREATE, tu peux :
1 Créer tous tes STATIC, un par page, et tu récupères leur handle dans un tableau.
2 Cacher tous tes STATIC, sauf celui de la première page, avec ShowWindow.
3 Créer tous tes contrôles dans le bon STATIC en leur affectant hWndParent.

Une alternative au STATIC pour se débarrasser des contrôles d'une form, c'est d'utiliser GetWindow.

Ca doit ressembler à ça :

HWND hwnd;

hwnd = GetWindow(HandleForm, GW_CHILD);
while (hwnd != NULL)
{
    ShowWindow(hwnd, SW_HIDE);
    hwnd = GetWindow(hwnd, GW_HWNDNEXT);
}

Mais bon, après la partie chiante, c'est de se souvenir des handle des différents contrôles de chaque pages pour les réafficher avec ShowWindow.
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008

Ok merci pour tes conseils je vais essayé tout ca
En fait avant mon WM_CREATE je parse un fichier contenant les infos me disant quels controles créer, et ensuite je remplissait des tableaux contenant ces informations, et lisait ces tableaux pour créer les composants
Donc la j'ai essayé, lors du clique sur un bouton, de faire un DestroyWindow() pour chaque composants, puis je reinitialise les tableaux
Enfin, je relance un noueau parsing sur un autre fichier, et appelle à nouveau le WM_CREATE avec un SendMessage .

Ca ma l'air pas mal pour l'instant, je verrais si ca plante plus loin! ^^

Encore merci pour ton aide, je regarde tout de meme les static ( le souci c'est que je ne connais pas a l'avance le contenu de mes ecrans : je recois le premier fichier via une requete http, jenvoi une reponse et recois un nouveau fichier etc...)