Thread +CreateDialog

cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004 - 28 juil. 2003 à 12:03
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008 - 1 août 2003 à 11:06
Bonjour,

voila, je dois creer des fenetre a partir d'un thread.
Le pb c'est que la fenetre ce cree bien mais on
ne peut rien faire dedans, car il n'y a pas ca apres
ca creation :
while( GetMessage(&msg,NULL,0,0) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

Mais je ne veux pas rajouter ces lignes la car je dois
garder la main dans mon thread, pour qu'il puisse
creer d'autres fenetre.

J'ai essaye d'attacher les msg de ce thread au thread
principal avec AttachThreadInput, mais ca ne marche pas.

Quelqu'un aurait une idee ?

D'avance merci.

Arno

10 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
28 juil. 2003 à 13:54
Salut,
Si tu utilise CreateDialog c'est que tu fais une dialogbox non modale (qui retour le handle de la dialog tout de suite).
Pas besoin de boucles de messages (car dialogbox), donc ca bloque pas le thread.
0
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004
28 juil. 2003 à 15:09
Salut,

c'est ce que je fais justement, et je suis oblige de rajoute
ces 5 lignes pour que ca marche sinon ca marche pas.

Je cree mon thread comme ca :

CreateThread(NULL, 0, thread_receive, NULL, 0, &thread_receive_id));

Voila la fonction du thread :

DWORD WINAPI thread_receive(VOID *PVOID)
{
HINSTANCE instance;
FARPROC lpfn
...
instance = (HINSTANCE)GetWindowLong(hwndmain,GWL_HINSTANCE);
lpfn = MakeProcInstance((FARPROC)dialog_test, instance);
CreateDialog(instance, MAKEINTRESOURCE(IDD_DIALOG_TEST), hwndmain, (DLGPROC)lpfn);
...
}

Et ca marche pas, sauf si je rajoute les 5 lignes. Je comprend
pas pourquoi.

Si cela a pu t'aider.

Arno
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
28 juil. 2003 à 15:36
Salut,
Ah non la je dois avouer que c'est au dessus de mes capatités désolé.
Si ton thread se termine juste apres CreateDialog, c'est normal que la dialog ne s'affiche pas. Quand tu met la boucle de messages, ca bloque le thread et donc la dialog peut s'afficher. Je pense que c'est ca.
0
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004
28 juil. 2003 à 15:44
Salut,

nan nan, le thread ne se termine pas, mais j'ai fait un raccourci pour pas avoir a copier/coller tout le code.
En fait mon thread tourne en boucle sur un select,
et dispatch les msg recu aux fonctions associes
a l'entete du msg, ensuite c'est dans une des fonctions
que je fais le CreateDialog.

Mon thread ne se bloque donc pas sauf si je rajoute les 5
lignes pour les messages.

Desole de ne pas avoir ete claire.

Arno
0

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

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
28 juil. 2003 à 15:48
Désolé c'est pas dans mes cordes alors.
0
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004
28 juil. 2003 à 15:49
arf ok. Merci quand meme.

Arno
0
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004
28 juil. 2003 à 16:42
Ok j'ai trouve une solution :

J'ai cree un message (donc un simple #define MONMSG 0x37298), et ensuite dans le switch des msg de ma fenetre
principal j'ai rajoute :

case MONMSG:
/*code pour creer la fenetre*/
break;

Et a partir de mon thread j'envoi le message a ma fenetre :

SendMessage(hwndmain, MONMSG, (WPARAM)0,(LPARAM)0);

Et voila, ca marche nickel.

Arno
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
28 juil. 2003 à 17:25
Salut,
Content que ca marche, il fallait y penser :)
Sinon, les messages reservés pour windows sont < 0x0400.
Donc pas besoin d'aller jusqua 0x37298 pour etre sur d'avoir un message inutilisé, 0x0401 suffit.
0
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004
28 juil. 2003 à 18:43
Ah ok, c'est util ca, grand merci.

Arno
0
milhandril Messages postés 55 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 11 décembre 2008
1 août 2003 à 11:06
g un pb similaire je désire ouvrir une simple boite de dialogue sans bloquer mon code. pourrais tu m'envoyer ton code ca me serais très utile!!
0
Rejoignez-nous