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] WS_TABSTOP entre CDialog imbriquée [Fait]


Sujet :

MFC

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut [MFC] WS_TABSTOP entre CDialog imbriquée
    Bonjour,

    Voici mon problème :

    J'ai une boite de dialogue (appellons la Diag1) qui possède un control static (appellons le ancre) qui me permet d'afficher une autre boite de dialogue (par exemple Diag2) dans Diag1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BOOL
    Diag1::OnInitDialog()
    {
        CDialog::OnInitDialog();
        diag2.Create(IDD_DIAG2, &ancre);
        ...
    }
    Diag2 dispose de ses propres control avec un ordre de tabulation propre. Il en est de même pour Diag1.

    J'aimerai faire en sorte que les éléments de Diag2 fasse partie des "objets tabulables" de Diag1.

    Voilà si quelqu'un a une idée...

    Merci d'avance.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    un essai a creuser ,je me lance ..
    essaie de changer le zorder de ta dialogue 2 a la suite de ancre
    avec setwindowpos .

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    Merci pour l'idée...

    Mais ça ne marche pas.

    N'y a-t-il donc aucune méthode dans les MFC qui permet de créer sois-même la liste de succession des tabstop

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    a tout hasard tu as essayé de mettre le style WS_TABSTOP a ta dialogue ?

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    Oui, j'ai déjà essayé et ça n'y a rien fait.

    Sinon j'avais dans l'idée d'intercepter le message de l'appuie sur tab.

    Mais je voulais d'abord voir s'il n'y existait pas un moyen plus direct. Surtout que je ne suis pas sur que je pourrais encore intercepté ce message lorsque le focus sera sur diag2.

    Pour résumer, si je ne fais rien la tabulation me permet de naviguer dans diag1. Ensuite, si je clique sur un des contrôles de diag2, la tabulation me permet de naviguer dans diag2 mais pas de revenir dans diag1.

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    Je crois que je vais finir par abandonné l'idée de la boite de dialogue imbriquée et que je vais créer tout mes contrôles à la volée se sera peut-être plus simple

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    Vraiment personne n'a de nouvelles idées à me proposer

  8. #8
    Membre actif Avatar de blackhorus
    Inscrit en
    Février 2003
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 209
    Points : 226
    Points
    226
    Par défaut
    Sinon j'avais dans l'idée d'intercepter le message de l'appuie sur tab.
    je trouve cette idée pas mal, essaye d'intercepter le TAB du dernier control et fais passe Dialog 1 en fenetre active, et de même pour le dernier control du Dialog1

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    essaye d'intercepter le TAB du dernier control et fais passe Dialog 1 en fenetre active, et de même pour le dernier control du Dialog1
    C'est effectivement ce que je pensais faire, mais ceci ne me satisfait pas entierement.

    En effet comment utiliser cette méthode si on ne dispose pas du code de Dialog1.

    Même si dans mon cas j'ai effectivement le code des deux classes, je me demande s'il n'y a rien d'un peu plus propre :

  10. #10
    Membre actif Avatar de blackhorus
    Inscrit en
    Février 2003
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 209
    Points : 226
    Points
    226
    Par défaut
    c'est vrai qu'il faut modifier le code de chaque dialog, mais je crois pas qu'il existe une solution standard dans windows...

    je me demande s'il n'y a rien d'un peu plus propre...
    crois moi, c'est propre, vu le travail que tu veux faire, on aurait dis le contraire pour une simple manip...

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    Ok, je te fais confiance alors va pour le tag Résolu

  12. #12
    Membre actif Avatar de blackhorus
    Inscrit en
    Février 2003
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 209
    Points : 226
    Points
    226
    Par défaut
    ne prends pas ma solution pour argent comptant , prends la simplement comme une-solution-pour-l'instant-en-attendant-de-trouver-mieux...

  13. #13
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut ,
    je reviens a la charge ,
    essaye de mettre le flag :WS_EX_CONTROLPARENT a la dialogue parent.

  14. #14
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    Ca maaaaaaaaarrrrrrrrche.

    A ceci prêt qu'il faut que diag2 ait le style DS_CONTROL.

    Donc pour ceux que ça interesse il faillait rajouter ceci dans le OnInitDialog de Diag1
    ancre.ModifyStyleEx(0, WS_EX_CONTROLPARENT);
    Merci farscape je m'incline devant ta science (tu as du bien galèrer pour trouver le bon style dans msdn , j'avoue ne pas avoir cherché dans les styles etendues )

    Ce coup-ci s'est vraiment résolu et de maniere propre (avec l'autre il y avait des problèmes avec les némonics)

    Encore merci à tous pour votre aide

  15. #15
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    Une petite précision pour ceux qui voudrait faire la même chose : diag2 doit avoir le style WS_CHILD

  16. #16
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par CroustRyu
    tu as du bien galèrer pour trouver le bon style dans msdn
    Disons que j'ai eu une soudaine intuition lumineuse

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Je rencontre la même problématique que toi pour mon projet. J'ai une dialog "mère" dans laquelle j'affiche les dialog de mes plugins (sans barre de titre ni contour) positionnées grâce à un static de la mère.

    J'ai tenté d'appliquer ta solution, mais elle ne peut (apparremment) pas fonctionner à cause d'une pompe à messages qui se trouvent dans le code de la dialog mère (juste après l'affichage de la dialog fille)...

    Du coup, j'ai mis en place la seconde solution : traitement de la touche TAB dans la pompe à messages. Cela fonctionne presque bien. Je ne rencontre qu'un seul problème avec cette solution, c'est que je n'arrive pas à passer des controles de la dialog fille à ceux de sa mère...

    J'aimerais savoir si il est possible de détecter si la touche TAB est arrivée sur le dernier controle de la fille, pour pouvoir à ce moment là effectuer le TAB sur le premier controle de la mère...

    En gros, ce qu'il me faut, c'est pouvoir connaitre l'indice 'tab order" d'un controle, ou un autre moyen de l'identifier...

    Pouvez-vous me donner un petit coup de pouce ?

    Merci d'avance.

    -Pat-

    PS : si vous pensez que cette réponse mérite d'être déplacée dans une nouvelle discussion, tapez 1, ou bien dites-le moi tout simplement

  18. #18
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu peux faire comme suit:
    sur preTranslateMessage:
    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
     
    BOOL MyChild::PreTranslateMessage(MSG* pMsg) 
    {
        // TODO: Add your specialized code here and/or call the base class    
        if (pMsg->message == WM_KEYDOWN)
        {            
            CWnd *pWnd,*pFocused;
            switch (pMsg->wParam)
            {
            case VK_TAB:
                        pFocused=pWnd=CWnd::GetFocus();
                        // le premier dans l'ordre des tabulations
                          CWnd *pFirstCtrl=pWnd->GetNextDlgTabItem(NULL);                              // le suivant par rapport au courant...
                        CWnd *pCtrlNext=pWnd->GetNextDlgTabItem(pFocused);
                        if(pFirstCtrl==pCtrlNext)
                         {
                             // si le suivant est égal au premier dans l'ordre du tab     
                             //control c'est que l'on est sur le dernier ...
     
                          }
            }
    //......
    }

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Merci Farscape pour ta réponse. Elle semble convenir à ce que je cherchais à faire.

    Il ne me reste plus qu'à mettre ça en place

    @+, et merci encore !

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Bon bah l'idée est bonne et correspond bien à mon besoin, mais quoi que je fasse je passe tout le temps dans le "if(pFirstCtrl==pCtrlNext)"

    Je cherche actuellement où se situe le problème...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MFC] Communication entre une CDialog et une CFormview
    Par julien.nasser dans le forum MFC
    Réponses: 8
    Dernier message: 06/07/2006, 14h32
  2. [MFC] Communication entre CDialog
    Par Bmagic dans le forum MFC
    Réponses: 2
    Dernier message: 27/06/2006, 17h26
  3. [MFC] différence entre CView et CDialog?
    Par r0d dans le forum MFC
    Réponses: 3
    Dernier message: 22/02/2005, 16h23
  4. Réponses: 6
    Dernier message: 28/02/2004, 09h19
  5. [MFC] CPropertySheet (ou CDialog)
    Par tut dans le forum MFC
    Réponses: 4
    Dernier message: 06/11/2002, 13h09

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