leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 2010
-
27 août 2004 à 08:39
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 2010
-
27 août 2004 à 14:42
salut a tous. bon une question toute bete.
je voudrais a chacune de mes actions savoir si ma fenetre est ouverte, férmée, rétrécie,etc. alors la question que je me pose : est ce que je dois créer un hwnd global que j'initialise a chaque ouverture de ma fenetre et ke a chaque fermeture (je dois dc controler tous les cas, ok, annuler, la croix...) j'invalide mon hwnd global, ou un findwindow a chaque fois que j'ai besoin serait la solution? dans ce cas je fait comment, sachant que la fenetre en question est une dialogbox? paske findwindow ca marche comment? jai cherché msdn et jai regardé les sources ou c'est utilisé, jai pas trop capté comment je fait pour l'utiliser. merci d'avance
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 27 août 2004 à 11:07
Ben tu utilises un hwnd global ke tu initialises ds ton WM_INITDIALOG et pis apres tu joues avec ! Pas de findwindow puis ce que tu as le hwnd, pkoi le chercher ?
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 27 août 2004 à 11:38
Une fois que tu as défini ton handle en globale il n'est pas nécéssaire de le rechercher a chaque fois que tu voudras t'en servir. c'est bien le but des varaibles globales.
Tu vas donc déclarer le handle en global et tu va l'initialiser dans ton WM_INITDIALOG:
Ensuite pour trouver dans quel etat est ta fenetre, sert toi de la fonction GetWindowPlacement(). Si je me trompe pas elle renvoie un flag en fonction de l'etat de la fenetre : WM_MAXIMIZE pour agrandie, WM_MINIMIZE pour retrécie, WM_SHOWNORMAL pour etat normal,....
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 27 août 2004 à 11:44
Je savais pas pour GetWindowPlacement(), jviens de verifier, c tt a fait exact ce ke tu dis DeathCrash. Sinon il existe des fonctions IsQuelqueChose : IsIconic, IsZoomed, IsWindow...Etc.
Mais c koi le mieux ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 27 août 2004 à 12:17
non ma question est uniquement "qu'est ce qui sera la mieux?" paske pr moi, le findwindow sera plus lourd, mais la variable globale est plus chiante a manier et moins sure. et si j'utilise le findwindow, ca marche comment? je fais comment pour utiliser findwindow sachant que je cherche ma dialogbox? je sais bien que je vais pas utiliser les 2, ca serait debile (chui newbie en api, mais le C++ ca va, je manie correctement on dira)
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 27 août 2004 à 12:19
et le probleme si j'initialise mon hwnd dans la initdialog, est ce que quand ma fenetre se ferme mon handle sera invalidé corectement ou est ce qu'il faut ke je le fasse a la main des ke je fais une action suceptible de fermer ma fenetre? genre est ce que je dois faire
case ID_CANCEL:
monhwnd = 0;
//traitement;
break;
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 27 août 2004 à 12:34
AlexMan> Le mieux c'est d'utiliser GetWindowPlacement() car elle te renvoie l'etat actuel de ta fenetre.
Si tu utilises IsIconic, tu vas recuperer un booléen qui te dira simplement si ta fenetre est minimisé ou pas mais ne te donnera pas son état et tu devras donc faire des tests avec d'autre fonction comme IsZoomed(),....
GetWindowPlacement te renvoie le résultat direct.
leprov> Apparemment t'a pas compris grand chose a l'avantage des variables globales. Je vois pas ou est la difficulté a utiliser une varaible qui en plus est globale!
Au cas ou tu ne l'aurais pas compris, le handle d'une fenetre est crée a son lancement et ne change pas durant toute l'execution de celle ci, quelque soit sont etat d'affichage!
T'es question ne sont pas non plus très clair. Ca reflete surement le fait que tu n'ais pas compris certaines bases du C et l'utilisation des fenetres et dialog!
Qu'est ce que tu appelles "invalidé le HWND" ???
A quoi ca sert de rechercher sa propre fenetre avec FindWindow() alors que le handle tu l'as deja ???
T'es sure d'avoir tout bien compris concernant la programmation en C/C++ ???
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 27 août 2004 à 12:56
bon ma kestion est pas claire.... si on est bien d'accord un hwnd est un pointeur. un pointeur est valide ou invalide. ce que je dis c'est que j'ai stocké mon hwnd ds une variable globale, j'ai donc un pointeur sur ma fenetre. mintenant je ferme ma fenetre, et j'utilise mon hwnd. et la ca fait koi, ca va me provoquer une erreur paske mon hwnd pointe sur une fenetre qui n'existe plus, ou ca va me sortir que mon pointeur est invalide et mon prog va continuer a s'executer correctement? si je fais un showwindow sur ce hwnd, ou un getwindowplacement, est ce que ces fonctions vont me sortir une erreur, ou fonctionner en me disant que l'etat de cette fenetre est qu'elle n'existe pas? mon probleme dans l'utilisation de la variable globale est la, est ce que une fois ma fenetre fermée cette variable est toujours utilisable, ou est ce qu'il faut que dans mon analyse des messages envoyés a ma fenetre il faut a chaque fois ke j'invalide mon hwnd pour dire que j'ai fermé ma fenetre?
j'espere que ma kestion est plus claire
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 27 août 2004 à 12:59
mais tu veux utiliser ce handle a partir de la fenetre mm ou d'une autre application ? Si c la mm fenetre, aucune raison de perdre le hwnd, variable globale, c'est la solution.
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 27 août 2004 à 13:01
mon prog est ds la systray et ouvre ma dialogbox dont je veux pvr connaitre l'etat a tout moment a partir de la systray, dc a partir du meme programme, mais a partir d'une autre fonction
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 27 août 2004 à 13:03
Ben on se fout ke ce soit une autre fonction puis ce ke ton hwnd sera GLOBALE. Je pense que tu vas chercher des pb la ou il n'y en a pas, c tres simple, si tu suis ce ke DeathCrash ou mm moi t'avons dit, ca ira tres bien.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 27 août 2004 à 13:11
leprov> Ta la tete dur ma parole. Les API sont très bien fait. En cas d'echec elle te renveront la plupart du temps une valeur d'echec. Pour cela faut voir dans la MSDN.
Si j'ai tout bien compris, tu as un programme principale qui ouvre une dialogbox.
Maintenant dans ton programme principale tu vas conserver le handle de ta dialogbox. Ainsi tu pourras connaitre l'etat de ta fenetre a tout instant. Si la fonction GetWindowPlacement te renvoie une erreur c'est alors que tu seras que ta dialogbox a été fermé par l'utilisateur et que son handle est ainsi plus valide.
Comme AlexMan te la dis pourquoi est ce que tu cherches des problemes la ou il y en a pas ?!
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 27 août 2004 à 13:15
dsl...
je cherche pas des pbs, je cherche a comprendre ce que je fais et comment fonctionnent les choses, simplement. pour vous c'est evident, moi je debute, je prefere chercher a comprendre les choses en profondeur plutot que de les faire a l'instinct et un jour me rendre compte que les choses fonctionnent pas comme je croyais.....
en ts les cas merci d'avoir pris le tps de repondre
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 27 août 2004 à 14:42
merci de m'avoir repondu.
j'ai juste fait des if(IsWindow (MonHwndGlobal)) ShowWindow (MonHwndGlobal, WS_RESTORE);
et comme ca ca marche. merci d'avoir pris le tps de m'expliquer comment ca fontionnait (et faut avouer kjai eu du mal, vous avez été patient :D)