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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm� 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
    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
    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 confirm� 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
    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
    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 confirm� 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
    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
    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 confirm� 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
    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
    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 confirm� 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
    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
    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 confirm� 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
    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
    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 confirm� 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
    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
    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 confirm� 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
    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. Comment initialiser une classe membre d'une autre
    Par Invit� dans le forum C++
    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