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 :

(VC++6 /C) Récupérer le message CB_SETCURSEL


Sujet :

MFC

  1. #1
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut (VC++6 /C) Récupérer le message CB_SETCURSEL
    Bonjour @ tous !

    J'ai une fenêtre avec 2 combo-box et une case à cocher.
    Le premier peut changer ou pas le second suivant la valeur.
    Le second peut cocher automatiquement la case suivant sa valeur.
    Lorsque je récupère le message CBN_SELCHANGE du 2eme CB, il n'y a aucun problème pour cocher ou non.
    Par contre, je n'arrive pas à récupérer le message CB_SETCURSEL...
    (le CBN_SELCHANGE n'est pas envoyé lorsqu'on envoie un message CB_SETCURSEL)

    Voici une partie de mon code :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    BOOL CALLBACK PRSMaFenetreDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
     
    switch (message)
    {
    // du code mais rien d'important pour la suite
     
      case WM_COMMAND:
         switch(LOWORD(wParam))
         {
             case ID_CB1:
                if (HIWORD(wParam) == CBN_SELCHANGE)
                {
                     if (GetDlgItemText(hDlg, ID_ASS_ALIAS, szBuff, sizeof(szBuff)) != 0)
                     {
     
                          // Ca passe bien tout ce code
     
                          if (strstr(strupr(szBuff), "XXX") == 0)
                              SendDlgItemMessage(hDlg, ID_CB2, CB_SETCURSEL, 3, 0L);
                          if (strstr(strupr(szBuff), "YYY") == 0)
                              SendDlgItemMessage(hDlg, ID_CB2, CB_SETCURSEL, 1, 0L);
                     }
                }
                break;
     
             case ID_CB2:
                // C'est ici que je veux récuperer le CB_SETCURSEL aussi
                if (HIWORD(wParam) == CBN_SELCHANGE)
                {
                     i = (int) SendDlgItemMessage(hDlg, ID_CB2, CB_GETCURSEL, 0, 0L);
                     if (i == 1 || i == 4)
                         CheckDlgButton(hDlg, ID_CHECKBOX1, BST_CHECKED);
                }
                break;
         }
         break;
    }
     
    }
    Comment récupérer ce message CB_SETCURSEL, je pense avoir tout essayer mais rien concluant ?
    Merci d'avance.
    @++
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

  2. #2
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut
    Bon j'ai trouvé qqchose, mais ça ne m'arrange pas trop.
    Le seul moyen que le CB_SETCURSEL soit pris en compte, c'est de lancer le message CBN_SELCHANGE ensuite...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SendMessage(hDlg, WM_COMMAND, MAKELONG(ID_CB2, CBN_SELCHANGE), (LPARAM)hDlg);
    Je n'aime pas trop cette solution.
    En auriez-vous une autre ?
    @++
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Points : 93
    Points
    93
    Par défaut
    bonjour,

    Je vois 2 possibilités

    1- Vous faites aussi le test et le chek apres avoir fait la selection suite
    au CBN_SELCHANGE de la premiere combo

    2- Vous subclassez la deuxieme combo et dans la nouvelle
    procedure vous envoyez vous meme le CBN_SELCHANGE
    a la reception d'un CD_SETCURSEL

    Salut

  4. #4
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut
    Merci
    Mais ce n'est pas trop ce que je voulais faire (cf mon 2e message). J'aimerais vraiment recevoir le message CB_SETCURSEL...
    @++
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut
    salut !!

    personnellement, pour utiliser le message CB_SETCURSEL, je ne fais pas ca, et ca marche

    voila comment je procede, c'est tres simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SendMessage(GetDlgItem(hDlg_de_la_procedure_qui_gere,IDC_MACOMBO),CB_SETCURSEL,position,NULL);
    un exemple dans l'un de mes codes :
    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
    24
    25
    26
     
    LRESULT CALLBACK DlgProc(HWND DlgProc, UINT msg, WPARAM wParam, LPARAM lParam)
    {
     switch(msg)
     { 
     ....
     case WM_COMMAND: 
      switch(HIWORD(wParam))
      {
       case BN_CLICKED:
        switch(LOWORD(wParam))
    	{
    	 case IDC_BUTTON1:
    	  SendMessage(GetDlgItem(DlgProc,IDC_DEVICES),CB_SETCURSEL,1,NULL);
    	 break;
         	} 
         break;
        }
     break;
     
     default:
      return FALSE;
     }
     
     return FALSE;
    }
    cordialement
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  6. #6
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut
    Il n'y aucune différence entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(GetDlgItem(hDlg,ID_CB2), CB_SETCURSEL, 1, 0L);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendDlgItemMessage(hDlg, ID_CB2, CB_SETCURSEL, 1, 0L);
    Le problème ne vient pas de l'envoi du message, comme j'ai pu le dire dans mon message d'origine, mais de sa réception. J'aurais faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    case ID_CB2: 
       // C'est ici que je veux récuperer le CB_SETCURSEL aussi 
       if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CB_SETCURSEL) 
       { 
           i = (int) SendDlgItemMessage(hDlg, ID_CB2, CB_GETCURSEL, 0, 0L); 
           if (i == 1 || i == 4) 
                CheckDlgButton(hDlg, ID_CHECKBOX1, BST_CHECKED); 
       } 
       break;
    Merci quand même.
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

  7. #7
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut
    Bon tant pis.
    Je mets le message en Résolu malgré le fait que la solution ne soit pas totale.
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

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

Discussions similaires

  1. [VS 2003]récupérer des messages midi
    Par NiamorH dans le forum Visual Studio
    Réponses: 2
    Dernier message: 05/05/2006, 11h49
  2. [Outlook] Impossible de récupérer mes messages ...
    Par Rumeurs dans le forum Outlook
    Réponses: 4
    Dernier message: 13/04/2006, 19h05
  3. [outllok2003] Récupérer des messages supprimé
    Par m-mas dans le forum Outlook
    Réponses: 7
    Dernier message: 21/02/2006, 16h47
  4. Récupérer un message d'erreur
    Par yvancoyaud dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/09/2005, 07h58
  5. [TControl] Récupérer le message court et long du hint ?
    Par Cornell dans le forum Composants VCL
    Réponses: 6
    Dernier message: 19/11/2003, 08h55

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