IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Gui Win32 et Thread


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut Gui Win32 et Thread
    Bonjour a tous,
    j'ai un problème avec une fenetre win32 qui se trouve dans un thread.
    Ma fenêtre s'affiche bien mais je cherche comment faire pour changer le titre grâce a SetWindowText mais depuis le thread principale et non celui qui a créer le gui, comment puis je faire ?


    Merci d'avance

    Cordialement,
    NeoKript

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu veux dire que SetWindowText() tout court ne marche pas? Bizarre, mais possible. Essaie en envoyant un message WM_SETTEXT à la fenêtre...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Merci pour ta reponse,
    SetWindowsText passait nickel avant que je mette la fenetre dans un thread.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2009
    Messages : 237
    Par défaut
    en fait c'est normal que ça ne marche pas dans un autre thread puisque la pile de message n'est pas la même, et pour envoyer le message a la bonne pile de message il faut passer par SendMessage ou PostMessage.

    mais le mieux est de gérer toute la partie graphique dans le thread principale, pour être thread safe coté Gui et éviter les différents problèmes de ce genre.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Merci pour vos reponse, je n'arrive pas a faire fonctionner sendmessage... pas de segfault ou d'exception mais le titre n'est pas changer :


    SendMessage(this->_window, WM_SETTEXT, NULL, (LPARAM)Title.ToLPCSTR());
    Pour changer le Titre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    LRESULT CALLBACK MainProc(HWND hWnd, UINT mes, WPARAM wParam, LPARAM lParam)
    {
    	HDC hDC;
    	PAINTSTRUCT paintst;
    	switch (mes)
    	{
    	case WM_PAINT:
    		hDC=BeginPaint(hWnd,&paintst);
    		EndPaint(hWnd,&paintst);
    		return 0;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		return 0;
    	case WM_SETTEXT:
    		{
    		GString Title("test............");
    		SetWindowText(hWnd, Title.ToLPCSTR());
    		return 0;
    		}
    	default:
    		return DefWindowProc(hWnd, mes, wParam, lParam);
    	}
    }
    je ne sais non plus comment convertir le LParam en chaine de caractère.
    Merci d'avance

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Visiblement pas mieux avec PostThreadMessage ... :s

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/02/2014, 09h21
  2. Réponses: 5
    Dernier message: 24/10/2010, 22h11
  3. GUI-Win32 Historique d'un contrôle EDIT
    Par user25 dans le forum C++
    Réponses: 1
    Dernier message: 18/10/2010, 16h34
  4. [GUI] gtkmm et threads
    Par drKzs dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 02/07/2009, 11h36
  5. Modification d'un objet GUI par un thread
    Par Dazdh dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 24/03/2009, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo