SendMessage à Dialog

Résolu
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 18 juin 2005 à 15:14
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 18 juin 2005 à 17:51
Salut

J'ai un question pour la valeur retournée pas SendMessage quand on
l'utilise pour envoyer un message à un Dialog. Voici un exemple:



INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message)

{

case WM_USER+1:

return 1;

case WM_INITDIALOG:

if(SendMessage(hDlg, WM_USER+1, 0, 0))

MessageBox(0, 0, 0, 0);

return TRUE;

case WM_COMMAND:

if (LOWORD(wParam) IDOK || LOWORD(wParam) IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));

return TRUE;

}

break;

}

return FALSE;

}



Ici je dis de renvoyer 1 au message WM_USER+1, mais SendMessage me
renvoit 0, la MessageBox ne s'affiche pas. Par contre si je mets return
0; SendMessage me retourne une valeur non nulle.

Avec des fenêtres "normales" c'est le contraire (ca semble plus logique aussi).

C'est normal ce truc ou c'est moi qui divague

8 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juin 2005 à 17:49
Y a que toi qui sait vraiment où en est ton prog...
Si tu dois par force passer par message de fenêtre alors faudra un pointeur pour le résultat.

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juin 2005 à 16:00
return 1 ne sera pas le retour pour SendMessage mais s'en va dans eax au system.
Faut éviter ce genre de construction, pas de SendMessage sur ta dialog alors qu'elle est en phase d'initialisation.

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 juin 2005 à 16:10
Ici c'était juste pour l'exemple, dans mon prog ce n'est pas ici que je la mets.

Mais eax ca correspond pas à la valeur de retour d'une API?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juin 2005 à 16:28
Si mais ton "return 1" de "case WM_USER+1" s'en va chez user32.dll en retour de DlgProc et non en retour de SendMessage.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 juin 2005 à 16:38
Et comment je fais alors? Je pensais que le principe était que celui
que la valeur retournée par SendMessage était fixé par celui qui le
traite (pour les fenêtre qui ne sont pas des DialogBox, c'est comme ca,
non?). Et puis comme SendMessage est synchrone, ca semblerait logique
qu'on puisse le faire.

Selon toi, la solution serait de passer un pointeur dans wParam ou lParam?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juin 2005 à 17:00
pointeur possible oui mais ne serait pas mieux en func indépendanrte ?

Pour ce qui est d'être logique, ça l'est complètement, regarde bien la logique du callback.

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 juin 2005 à 17:08
Je vois pas trop la, et de toute facons, je ne suis pas sur que ca
conviendrait à mon problème: la fenêtre à laquelle j'envoie le message
peut être de n'importe quelle classe (en fait il s'agit d'envoyer une
notification à une autre fenêtre, et la fenêtre qui recoit la
notification peut dire comment elle la gère, je pensais faire ca avec
la valeur de retour)

Si tu pense que ta solution peut faire ca, tu peux m'expliquer un peu plus?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 juin 2005 à 17:51
Je vais faire comme ca, du coup ca m'oblige a passer une structure,
mais ca m'évitera de perdre mon temps à chercher autre chose :)
0
Rejoignez-nous