Fonction qui recupere le HWND du prog courrant...???

Signaler
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
j'aurai besoin de recupere le HWND,
je sais ke l'on peut le mettre en global du genre

LRESULT CALLBACK DlgMainProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) //main procedure
{

avec case WM_INITDIALOG:
{
mainHwnd=hwnd;
//ou mainHwnd est en global

...
}

mais je trouve pas ca effectif

UNE SOLUTION..???
youpi :)

9 réponses

Messages postés
207
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2006

SAlut,

pour ton récupérer un handle HWND, je vois pas d'autre méthodes que de l'enregistrer qq part.

tu peux le récupérer par un GetParent si t'as un handle sur une fenêtre fille
je crois bien qu'il y a que le HINSTANCE que tu peux récupérer sans une autre variable que tu dois connaître...
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Comment ca tu trouves pas ca effectif? tu veut dire efficace? C'est sûrement aussi efficace que de faire un GetParent à chaque fois
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,
Comment c'est pas effectif? Quel est le problème exactement? Car je fais exactement comme tu fais pour retrouver ce HWND et ça ne pose pas de problème.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
vecchio56 > J'ai hesité avant de poster mon précédent message, c'est pourquoi j'ai pas vu le tien. Ce problème m'intrigue moi aussi car je trouve trouve cette méthode même plus efficace que de faire appel à GetParent().
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
ok les gars le truc c ke ca garde en mémoire le HWND du prog courrant donc vu ke je suis entrain de purger les fuites mémoires de mon prog et de purger également toute les variables globales, car j'en avais pas mal entre le char * et tout les autres pointeur (HIMAGELIST, WNDPROC, HMENU, HBITMAP,etc...) en mémoire ca pese lourd....
surtout ke la plupart du temps je peux pas les vider parceke je les utilises regulierements....

mon probleme est en faite une optimisation....
j'ai pensé o get parent mais j'ai tester ca pour verif
HWND testhwnd=GetParent(0);
ShowWindow(testhwnd,SW_HIDE);

en pensant ke dans le getparent en metant NULL il recupererait selui courant...

bref apres sur le point ke c plus effectif de mettre en mémoire ou d'appeler une fonction.... c sur ke sur des prog comme les miens c pas tres grave car il n'y a que 2000 lignes de codes....

je pense que le temps d'acces est peux etre un peux plus long (kelke milli secondes) mais ke l'on ne surcharge pas les places mémoires...

en bref peut etre ke je me trompe, ....

pour resoudre pour le moment avant ke kelk'un me trouve mieu je fais un findwindow sur la class de mon prog....

il est appellé juste une 50aine de fois (boucles)donc.... je sais pas

youpi :)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
4 octets c'est sur que ca pèse lourd?
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
C'est pas en virant les handles qui sont en variable globale que tu vas éviter des fuites mémoires. De plus, pour sauvegarder 1 seule varaible globale, il faut que le système alloue au moins une page mémoire (4 Ko) pour la section .data ou .bss alors autant l'utiliser.
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
ok bon je v rester en global alors...

merci les gars
youpi :)
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Par contre, si tu veut limiter la visibilité de certaines variables à un module (fichier source), déclare la static, elle aura une portée globale limitée au module ou elle est définie.

Ainsi, tu pourra avoir une variable static HWND s_hWnd; dans chaque module se référant à la fenêtre dont le module s"occupe (tu peux regarder ma source "serial" pour + de détails dans lequel chaque fenêtre est dans un .cpp diférent avec ses variables de module et ses traitements de messages)
http://www.cppfrance.com/code.aspx?ID=18704