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 :

[MFC] Manipulation du DateTimePicker (DialogBox)


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut [MFC] Manipulation du DateTimePicker (DialogBox)
    Bonjour,

    J'ai ajouter un DateTimePicker à une DialogBox via le menu ressource de VC++. Mais j'ai aussi rajouté l'option "show none" qui permet de "cocher" ou "décocher" la date : dans le cas où l'on décoche la date, celle-ci devient grisée et elle n'est pas prise en compte.

    J'aimerais récupérer le message qui permet de savoir si cette fameuse case est cochée ou non. Après des recherches, j'ai pu voir qu'il s'agissait d'un message de DTN_DATETIMECHANGE : la variable dwFlags qui vaut GDT_NONE quand la case est décochée et GDT_VALID quand la case est cochée.

    Mais je n'ai hélas pas réussi à intercepter ce message : j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CWnd* hWndCtrl = GetDlgItem(IDC_DATETIMEPICKER1);
    hWndCtrl->SendMessage(DTM_SETSYSTEMTIME ,GDT_VALID, 0); 
    mais sans succès
    j'ai essayé aussi cela :
    hWndCtrl->SendDlgItemMessage(IDC_DATETIMEPICKER1, DTM_SETSYSTEMTIME ,GDT_NONE, 0);
    J'ai aussi appelé la fonction OnDatetimechangeDatetimepicker1(NMHDR* pNMHDR, LRESULT* pResult)
    Mais elle intercepte tous les messages de changement du DateTimePicker (changement de date et case cochée/décochée) Or je ne veux que le message de case cochée/décochée.

    J'espère que j'ai été assez clair et que l'on pourra m'aider.


  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    tu te compliques la vie lol,
    ce message est interceptable directement sur le contrôle avec l'aide de classwizard (sous vc6.0) ou sous VC2005 :
    en faisant clic droit sur le contrôle pour avoir les propriétés ,ensuite l'icone en forme d'eclair jaune.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    Je suis sous VC6.0 et j'avais vu le message DTN_DATETIMECHANGE dans classwizard : il me permet d'appeler la fonction OnDatetimechangeDatetimepicker1(NMHDR* pNMHDR, LRESULT* pResult) en faisant Add Windows Message Handler ...
    Mais ensuite j'ai les 2 variables pNMHDR et pResult et je ne peux hélas rien faire avec ça.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut
    tu castes le retour comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        NMDATETIMECHANGE *pDTChange= reinterpret_cast<NMDATETIMECHANGE *>(pNMHDR);
     
        //pDTChange->st
        *pResult = 0;

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    Merci beaucoup, ça marche !
    J'ai fais ça pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     void CRequetes::OnDatetimechangeDatetimepicker1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
     NMDATETIMECHANGE *pDTChange= reinterpret_cast<NMDATETIMECHANGE *>(pNMHDR);
        if (pDTChange->dwFlags==GDT_NONE)
      AfxMessageBox(" case décochée ! ");
      else if (pDTChange->dwFlags==GDT_VALID)
      AfxMessageBox(" case cochée ! ");
        *pResult = 0;
    }
    Par contre, lorsque je lance la DialogBox, la case de la date est cochée à l'initialisation et j'aimerais qu'elle soit décochée, sais-tu comment on peut faire pour qu'elle soit décochée ?


  6. #6
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 109
    Par défaut
    C'est bon ! j'ai trouvé comment faire pour que la case de la date soit cochée lorsque l'on lance la DialogBox :
    Il faut rajouter le code suivant dans OnInitDialog()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     CWnd* hWndCtrl = GetDlgItem(IDC_DATETIMEPICKER1);
     hWndCtrl->SendMessage(DTM_SETSYSTEMTIME ,GDT_NONE, 0);

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2008
    Messages : 175
    Par défaut
    salut,
    cette petite discusion m'a bien aidé, mais j'ai trouvé plus simple pour désactiver la case à coché :
    Appeler la méthode SetTime() [sans argument] du controle CDateTimeCtrl

    Je me pose une sérieuse question sur l'utilité de la méthode DDX_DateTimeCtrl. J'ai bien l'impression qu'il vaut mieux s'en passer et faire le mapping à la main, en appelant les méthodes GetTime et SetTime du controle, ce qui permet, avec la valeur de retour, de savoir si la date est "NULL" ou pas.

    Un avis d'expert sur la question ?

  8. #8
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut,

    Je me pose une sérieuse question sur l'utilité de la méthode DDX_DateTimeCtrl. J'ai bien l'impression qu'il vaut mieux s'en passer et faire le mapping à la main, en appelant les méthodes GetTime et SetTime du controle, ce qui permet, avec la valeur de retour, de savoir si la date est "NULL" ou pas.
    c'est exactement ce que j'ai fais aussi dernièrement.
    régler et récupérer la date manuellement avec les fonctions CDateTimeCtrl::GetTime() et CDateTimeCtrl::SetTime()

    j'ai pas trouvé d'autres moyens pour le faire par DDX_DateTimeCtrl()

    @+

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

Discussions similaires

  1. MFC + Manipuler les chaînes de caractères
    Par mqsi dans le forum MFC
    Réponses: 2
    Dernier message: 15/11/2006, 16h24
  2. Réponses: 6
    Dernier message: 07/09/2005, 20h31
  3. [MFC] Manipuler un vecteur d'objets
    Par Yellowmat dans le forum MFC
    Réponses: 4
    Dernier message: 13/07/2005, 14h37
  4. [MFC] Manipuler un combo box
    Par homeostasie dans le forum MFC
    Réponses: 3
    Dernier message: 05/07/2005, 15h04
  5. [MFC] Manipulation de string
    Par mulot49 dans le forum MFC
    Réponses: 2
    Dernier message: 24/08/2004, 16h43

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