A voir également:
- [C Win32 Api] Communication entre 2
- 2 ecran pc - Guide
- Win32:malware-gen ✓ - Forum Virus
- Word numéro de page 1/2 - Guide
- Hacktool win32 autokms ✓ - Forum Virus
- Télécharger win32 valide pour windows 7 gratuit - Forum Windows
2 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
4 juil. 2006 à 16:39
4 juil. 2006 à 16:39
Salut,
Je ne connais pas de fonction pour retrouver le parent d'une fenêtre enfant dans le cas de Dialogbox.
Mais j'ai trouvé une astuce dans le lien que j'ai mis plus bas.
Il ya une fonction appelée FindWindow qui permet, à partir du nom de la fenêtre de plus haut niveau et de sa classe, de retrouver le handle vers cette fenêtre.
Ca ne paraît pas faisable puisque les DialogBox utilisent une classe par défaut fournie par windows que le programmeur ne choisit normalement pas.
Donc il faut t'arranger pour que la boîte de dialogue mère utilise une classe définie par toi, ensuite à partir du nom de cette classe, tu pourras retrouver le handle vers la fenêtre mère.
Tout est expliqué ici en C++ (en anglais, désolé....)
http://www.codeproject.com/useritems/SingleInstance_src.asp
Il faudra quelques petites modifications pour traduire ça en C, mais ça ne devrait pas être trop dur.
Perso, ce n'est que mon avis et pas forcément le plus avisé: moi j'utiliserais une variable globale pour le handle vers la Dialogbox mère. Les variables globales rendent le code plus illisible, c'est une surenchère de trop avec le mal de crâne que donne la lecture d'un code utilisant l'api windows. Mais bon, une variable globale bien signalée dans le code, bien mise en valeur dans sa déclaration en l'agrémentant de commentaires avec des petites étoiles :-), si ça peux vraiment faciliter la vie, pourquoi pas. Mais moins il y en a, mieux on se porte, il faut éviter ça dans la mesure du possible.
Je ne connais pas de fonction pour retrouver le parent d'une fenêtre enfant dans le cas de Dialogbox.
Mais j'ai trouvé une astuce dans le lien que j'ai mis plus bas.
Il ya une fonction appelée FindWindow qui permet, à partir du nom de la fenêtre de plus haut niveau et de sa classe, de retrouver le handle vers cette fenêtre.
Ca ne paraît pas faisable puisque les DialogBox utilisent une classe par défaut fournie par windows que le programmeur ne choisit normalement pas.
Donc il faut t'arranger pour que la boîte de dialogue mère utilise une classe définie par toi, ensuite à partir du nom de cette classe, tu pourras retrouver le handle vers la fenêtre mère.
Tout est expliqué ici en C++ (en anglais, désolé....)
http://www.codeproject.com/useritems/SingleInstance_src.asp
Il faudra quelques petites modifications pour traduire ça en C, mais ça ne devrait pas être trop dur.
Perso, ce n'est que mon avis et pas forcément le plus avisé: moi j'utiliserais une variable globale pour le handle vers la Dialogbox mère. Les variables globales rendent le code plus illisible, c'est une surenchère de trop avec le mal de crâne que donne la lecture d'un code utilisant l'api windows. Mais bon, une variable globale bien signalée dans le code, bien mise en valeur dans sa déclaration en l'agrémentant de commentaires avec des petites étoiles :-), si ça peux vraiment faciliter la vie, pourquoi pas. Mais moins il y en a, mieux on se porte, il faut éviter ça dans la mesure du possible.
En fait je suis pas sur de moi maintenant que tu m'as donné ton conseil. Tu parles de dialog fils mais en fait mes 2 dialogs sont indépendants (je les ai crées à l'aide d'un fichier de ressources). Je pense que je vais plutôt changer de tactique et créer ma fenêtre de dialogue dynamiquement plutôt que de cette façon.
Merci en tout cas pour ton conseil.
Merci en tout cas pour ton conseil.
Je code aussi en Win32 API, je viens de finir la version béta de mon crypteur de données.
pour communiquer entre les fenetres enfants et la parent tu peus utiliser SendMessage(fenetreParant, codeDuMessage, wParam, lParam);
Par exemple: tu a un controle d'édition qui se nomme hEdit, tu voudrais que en clicant ou cochant un boutton il se centre ou se met a une marge de 120px. Tu vas donc utiliser SendMessage avec les options appropriers.
Code C:
SendMessage(hEdit, EM_SETMARGINS, ES_CENTER, 120);
dans cette exemple j'envoie le message suivant:
faire une marge de 120px au controle hEdit.
PS: on pourrais même enlever ES_CENTER et le remplacer par wParam ou 0.
pour communiquer entre les fenetres enfants et la parent tu peus utiliser SendMessage(fenetreParant, codeDuMessage, wParam, lParam);
Par exemple: tu a un controle d'édition qui se nomme hEdit, tu voudrais que en clicant ou cochant un boutton il se centre ou se met a une marge de 120px. Tu vas donc utiliser SendMessage avec les options appropriers.
Code C:
SendMessage(hEdit, EM_SETMARGINS, ES_CENTER, 120);
dans cette exemple j'envoie le message suivant:
faire une marge de 120px au controle hEdit.
PS: on pourrais même enlever ES_CENTER et le remplacer par wParam ou 0.