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

MFC Discussion :

Existe-t-il une constante spécifique à chaque application ?


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 14
    Par défaut Existe-t-il une constante spécifique à chaque application ?
    Bonjour,

    Alors voici mon pb. J'utilise des envois de message dans mon application MFC.
    Pour ce faire, je définis un identifiant grâce à WM_APP ou WM_USER.
    Mais il y a une limitation, je voudrais pouvoir ouvrir 2 fois la même appli : .exe
    En l'essayant, J'ai pu utiliser les 2 appli en mêm tps ss pb mais lors de l'envoi de message au niveau des 2 appli en mêm tps, ça bug. Donc, les 2 appli utilisent le mêm ID pour envoyer des messages. Du coup, est-ce que qq'un connaitrai une constante définie par MFC qui soit spécifique à chaque appli ouverte.

    Merci bcp d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Ne vous compliquez pas la vie.
    Envoyé le même message à la bonne application en utilisant le bon handle de fenêtre.
    l'envoi de message au niveau des 2 appli en mêm tps, ça bug
    Corrigez le, le l'évitez pas car il est vraisemblablement le symptôme de quelque chose de bien plus grave.
    Ne jamais éviter un bug sans parfaitement le connaître, sinon il vous rattrapera toujours, et souvent au plus mauvais moment.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 14
    Par défaut
    Merci d'avoir répondu aussi rapidement.

    Je pense que je n'ai pas assez bien expliqué la situation:
    -J'utilise un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define ID_PROG WM_APP+1
    J'envoie un message avec cet ID et il est intercepté par un handle qui utilise également le même ID_PROG.
    Tout marche parfaitement quand je lance le .exe et que je démarre mon programme. L'envoi de message marche très bien.
    Mais le pb, c'est que mon programme, j'ai besoin de le lancer plusieurs fois. Du coup, cela implique plusieurs ouverture du .exe.
    La encore, il ya pa de pb, j'ai 2 fois le mêm programme qui est ouvert sauf que quand j'arrive à la partie d'envoi de message, ça plante. En fait, les 2 programmes, utilisent ID_PROG (ou disons WM_APP+1) qui a la même valeur pour les 2 (moi je croyai que c'étai différent d'un programme à l'autre mais apparement cé juste dans le cas d'application différente). Du coup, au niveau de Windows, un même message est envoyé et il peut être intercepté par 2 handles (chacun correspondant au programme ouvert).
    Une solution serait de compiler la 1ère fois mon programme avec ID_PROG qui vaut WM_APP+1 et copier le .exe autre part puis de le recompiler avec ID_PROG qui vaut WM_APP+2; j'ai essayé ça marche très bien.
    Mais ce n'est qu'une solution provisoire, il faut plutot trouver une constante qui à chaque ouverture du même .exe a une valeur constante différente: une constante spécifique à chaque ouverture d'un programme

    Ca a l'air compliqué mais en réalité, ça l'est pa trop

  4. #4
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    A la place de cet ID, je suppose qu'il vaudrait mieux passer par des HWND.

    Bon courage.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Peut-on voir le code qui post le message ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 14
    Par défaut
    Petite précision: les différents programmes (.exe) ouverts sont censés être indépendants.
    En fait, il s'agit d'un programme qui lance une fonction et envoie périodiquement des messages à une fenetre de progression qui reçoit le message et fait évoluer la barre de progression.
    Quand j'ouvre 2 programmes (.exe), les 2 sont censés travailler de façon indépendante et leur barre de progression évoluer ss pb (de façon indépendante). Sauf que là, il y a un lien entre les programmes ouverts, c'est que le même ID est utilisé du coup, c'est un peu n'importe quoi dans l'envoi et réception de messages. Pour un programme ouvert, ça passe, mais à partir de 2, rien ne va plus.. les messages se mélangent (à cause de l'ID)

    Merci pour l'info, concernant les HWND: ça marche comment, tu n'aurai pas un lien ou une information supplémentaire, ça permet également d'envoyer des messages et de les recevoir ?

    Merci pour votre aide !!

  7. #7
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Pour faire simple un HWND c'est un CWnd*.
    Contrairement au CWnd* le HWND n'est pas une classe, il ne dispora donc d'aucune méthode mais de fonction dont il sera le 1er argument (souvent les même que CWnd avec un argument de plus, le HWND).

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 14
    Par défaut
    On a une structure qui renferme le message à envoyer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct lesLabels
    {
    int id;
    int prog;
    string info;
    } lLabels;
    Voila pour le .cpp émetteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    pLabel->id=x;//identifiant pour la progression d'une barre.
    pLabel->prog=p; //Progression
    pLabel->info="2 paquets terminés / 5 restants";
    ::SendMessage(FindWindow(NULL,"Progression"),ID_PROG,(WPARAM)0,(LPARAM)pLabel);
    Le récepteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BEGIN_MESSAGE_MAP(plog, CDialog)
    	ON_MESSAGE(ID_PROG, &plog::test)
    END_MESSAGE_MAP()
     
    LRESULT plog::test(WPARAM wParam,LPARAM lParam){
    lLabels* pLs=(lLabels*)lParam;
    progressVector[pLs->id]->SetPos(pLs->prog); //progressVector renferme des //CProgressCtrl*
    labelVector[pLs->id]->SetWindowTextA(pLs->info); //labelVector renferme //des CStatic*
    UpdateData(TRUE);
    }
    stdafx.h (inclu dans les 2 parties émettrices et réceptrices):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define ID_PROG WM_APP+1
    Je voulais pas mettre le code au départ car ça risquait de compliquer les choses, N'hesitez pas pour plus d'infos ! Merci !!

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

Discussions similaires

  1. AmChart : Définir une couleur spécifique à chaque partie
    Par Kazumi dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 30/04/2014, 10h46
  2. Réponses: 2
    Dernier message: 01/09/2010, 15h16
  3. Réponses: 14
    Dernier message: 11/03/2010, 11h46
  4. [A-03] Existe-t-il une constante "n'existe pas" ?
    Par Tipstitou dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/01/2009, 12h37
  5. [W2000] Réseau spécifique pour chaque application
    Par SkyDev dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 01/02/2007, 10h33

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