[C Win32 Api] Communication entre 2

Fermé
taka - 3 juil. 2006 à 22:17
 Sm4rTi3s - 26 oct. 2006 à 09:19
Bonsoir à tous,

Je débute en programmation windows et j'ai du mal à m'y retrouver dans la masse d'informations et tutoriaux sur le win32 api (je code en C).

J'ai crée 2 "dialogs" dont une qui me sert de fenêtre principale. J'accède à l'autre par cette dernière. J'aimerai pouvoir modifier un contrôle "Edit" du "dialog" principal à partir de cette nouvelle fenêtre (c'est une fenetre d'option en gros).
Seulement, je ne sais pas comment faire pour communiquer d'une fenetre à une autre. Je pense qu'il faudrait que je sauvegarde les HWND des différents dialogs comme variable globale et faire ensuite appel à une fonction les utilisant mais je ne sais pas si c'est la bonne marche à suivre. De plus, je ne sais pas trop quelle fonction utiliser pour effectuer la "communication". Si quelqu'un avait une idée se serait sympa.

J'espère avoir été assez clair.

Merci pour vos réponses,

taka.

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
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.
0
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.
0
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.
0