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 :

Comment initialiser une ChildFrame ???


Sujet :

MFC

  1. #1
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut Comment initialiser une ChildFrame ???
    Salut,

    J'ai un dialog. (c'est bien ca)

    J'aimerai que quand une Childframe est créé, celle-ci soit adapté à la taille de mon dialogue, et que le dialog soit centrée dans ma fenetre...

    : Comment récupérer la taille du dialogue ?
    : Comment fixer la taille de de la childframe ?
    J'ai essayer de modifier cs dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BOOL CGUIView::PreCreateWindow(CREATESTRUCT& cs)
    {
      // TODO: Modify the Window class or styles here by modifying
      //  the CREATESTRUCT cs
      cs.cx=400;  
      cs.cy=400; 
     
      return CFormView::PreCreateWindow(cs);
    }
    mais ca ne marche visiblement pas...
    : Comment centrer le dialogue dans la fenetre ?

    Merci !

  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,
    pour recuperer la taille de la dialogue voir ce post :
    http://www.developpez.net/forums/vie...59308&start=90
    fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template <class GENERIC_LAYOUT>
    CSize CTplLayout<GENERIC_LAYOUT>::GetSizeDialog(UINT id)
    id represente l'identifiant de la fenetre.

    pour la taille de la view c'est dans la child qu'il faut intercepter precreatewindow:
    voir ce post :
    http://www.developpez.net/forums/vie...694412#1694412

    enfin la dialogue doit avoir comme parent la view ,
    et cocher l'option center (dans vc6.0) sur les proprietes de la dialogue dans l'editeur de ressources.

  3. #3
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    Pour changer la taille de la view manuellement, c'est bon pas de problème.
    Pour la suite ca se gate un peu...

    J'ai suivi tes instructions, qui m'ont amenées à ajouter les classes : CTplLayout et CTplMDIFrame. J'ai fait tout les changement que tu as indiqué... mais là je suis bloqué, quand je compile j'ai cette erreur :
    syntax error : missing ';' before '<'
    pour cette ligne dans CTplMDIFrame
    static CList<CString ,CString&> m_ListSection;
    et j'arrive pas m'en débarasser...

    Pour centrer le dialogue dans la fenetre : j'ai réussi à cliquer sur "center" ca ca va... lol Mais comment est-ce que je dois faire pour dire que le dialogue a pour parent la view ? (le dialogue utilisé, est celui créé automatiquement quand on créé un projet MDI)...

    : : :

  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
    pour ton erreur de compilation il doit te manquer #include <afxtempl.h> dans stdafx.h
    pour le parent de la dialogue ça se fait sur la construction de l'objet :
    voir constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CDialog( UINT nIDTemplate, CWnd* pParentWnd = NULL );

  5. #5
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cs.cx=this->GetSizeDialog(IDD_GUI_FORM).cx;
    cs.cy=this->GetSizeDialog(IDD_GUI_FORM).cy;
    Je peux avoir accès à la taille de mon dialog seulement si je suis dans ma view. Comment faire pour récupérer la taille de mon dialog lorsque je suis dans CChildFrame ?

    Je crois que j'ai raconté n'importe quoi. En fait ce que je veux centrer dans la fenetre c'est mon formulaire contenu dans ma CFormView.
    comment faire ?

    merci

  6. #6
    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
    Je peux avoir accès à la taille de mon dialog seulement si je suis dans ma view. Comment faire pour récupérer la taille de mon dialog lorsque je suis dans CChildFrame ?
    la fonction citée peut etre extraite de son contexte et utilisée n'importe ou..
    j'ai du mal a te suivre lol ...

  7. #7
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    J'ai également du mal à me suivre...

    Ce que j'ai maladroitement essayé de dire précédemment, c'est que je vois pas comment faire quelque chose qui ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    	// TODO: Modify the Window class or styles here by modifying
    	//  the CREATESTRUCT cs
     
    	cs.cx = GetSizeDialog(IDD_GUI_FORM).cx; //
                    cs.cy = GetSizeDialog(IDD_GUI_FORM).cx; //
     
    	if( !CMDIChildWnd::PreCreateWindow(cs) )
    		return FALSE;
     
    	return TRUE;
    }
    parce que "GetSizeDialog(IDD_GUI_FORM).cx;" ne peut que etre appelé depuis ma View.

  8. #8
    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 farscape
    Je peux avoir accès à la taille de mon dialog seulement si je suis dans ma view. Comment faire pour récupérer la taille de mon dialog lorsque je suis dans CChildFrame ?
    la fonction citée peut etre extraite de son contexte et utilisée n'importe ou..
    j'ai du mal a te suivre lol ...
    bien il me semble t'avoir repondu tu peux extraire cette fonction de la classe citée pour la mettre en place dans ta child ou ta classe d'application ou comme fonction globale non ?

  9. #9
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    oui effectivement... sorry

    J'ai mis cette fonction dans CChildFrame.

    dans PreCreateWindow j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cs.cx = GetSizeDialog(IDD_GUI_FORM).cx;
    cs.cy = GetSizeDialog(IDD_GUI_FORM).cy;
    Et je me retrouve avec une fenetre fille avec un cy avoisinant le 0 et un cx mega trop grand... qu'est-ce que j'ai bien pu encore faire comme bêtise ?

    Farscape, merci énormément pour ta patience...

  10. #10
    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
    hum,
    je sais pas quoi te dire ,j'ai testé sur la IDD_ABOUTBOX (le about d'une applie MFC)
    et ça fonctionne sans pb .
    il faut tracer la fonction et verifier que
    lpszTemplateName != NULL
    et ensuite que :hDialogTemplate != NULL

  11. #11
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    Je viens d'essayer avec IDD_ABOUTBOX ca marche.

    Ca ne marche pas parce que c'est pas un CDialog sur lequel je travail mais sur un CFormView...

    Est-ce que la fonction est-adaptable pour un CFormView ?

  12. #12
    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
    effectivement ,en fait tu m'as embrouillé des le debut lol ,
    je pensais que tu parlais d'une CDialog.
    la child est une enveloppe au dessus de la view (ici une CFormView) il n'y a donc pas de centrage possible (car inutile) par rapport a la child .
    que tu veuilles centrer la child et donc sa view par rapport à la mainframe ça d'accord.
    tu peux ça tres simplement dans la view:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void CTestCenterMDIView::OnInitialUpdate()
    {
    	CFormView::OnInitialUpdate();
     
    	GetParentFrame()->RecalcLayout();
    	ResizeParentToFit();
     
        CRect Rect,RectFrame;
        AfxGetMainWnd()->GetClientRect(&Rect);                
        GetParentFrame()->GetWindowRect(&RectFrame);
        int x=(Rect.Width()-RectFrame.Width())/2;
        int y=(Rect.Height()-RectFrame.Height())/2;    GetParentFrame()->SetWindowPos(NULL,x,y,0,0,SWP_NOSIZE|SWP_DRAWFRAME|SWP_FRAMECHANGED);
    }
    Maintenant l'autre solution possible c'est d'utiliser la mémorisation de la fenêtre comme c'est montré dans le post cité précédemment.
    L’utilisateur place la fenêtre ou il veut, et au prochain lancement elle est positionnée à l'emplacement mémorisé.

  13. #13
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    Désolé effectivement j'étais vraiment pas clair...

    Je vais simplifier mon problème :

    - si dans ma vue j'ai un "bouton OK".
    je voudrais que quelque soit la taille de la fenetre, ce bouton soit toujours au centre de la fenetre.
    (J'ai déja fait ca en java, avec les layout tu peux facilement spécifier Nord, Sud, Centre etc... pour positionner des éléments dans ta fenêtre et qu'ils soient toujours au même endroit relativement à celle-ci.)

    C'est possible ?

  14. #14
    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
    oui c'est possible (comme la sncf ),
    pour la gestion des layout voir ce post dans le post it de la faq:

    http://www.developpez.net/forums/vie...695999#1695999

    sinon pour le bouton c'est pas tres compliqué :
    tu interceptes le message WM_SIZE dans ta view :
    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
     
    void CFormSav::OnSize(UINT nType, int cx, int cy) 
    {
       CFormView::OnSize(nType, cx, cy);
     
     
    	// TODO: Add your message handler code here
        SetRedraw(FALSE);
     
       CRect RectCtrl,RectView;	
     
       CWnd *pWnd=GetDlgItem(IDC_MYIDCTRL]); // ton id de controle 
       pWnd->GetWindowRect(&RectCtrl);
     
        ScreenToClient(&RectCtrl);
       GetClientRect(&RectView);
     
       int x=(RectView.Width()-RectCtrl.Width())/2;
       int y=(RectView.Height()-RectCtrl.Height())/2;
     
       RectCtrl.OffsetRect(x,y);
     
       pWnd->SetWindowPos(NULL,RectCtrl.left,RectCtrl.top,0,0,SWP_NOSIZE | SWP_NOZORDER);
     
        SetRedraw();
    }
    voila j'ai pas testé mais ça devrait etre bon .

    ps :rassure moi c'etait pas ça le sujet initial

  15. #15
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    Euh...

    : Comment centrer le dialogue dans la fenetre ?
    Si tu remplace "Dialogue" par "le contenu de mon CFormView", voilà ce qu'aurait du être ma question initiale.

    Eh bien, je crois que j'ai toutes les cartes en mains maintenant...

    Merci

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

Discussions similaires

  1. [Interface]comment initialiser une combobox?
    Par Kenji dans le forum NetBeans
    Réponses: 4
    Dernier message: 22/10/2010, 20h47
  2. Réponses: 3
    Dernier message: 06/01/2007, 14h46
  3. Réponses: 2
    Dernier message: 13/10/2005, 17h46
  4. Réponses: 5
    Dernier message: 09/08/2005, 17h13
  5. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/04/2005, 18h46

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