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

Visual C++ Discussion :

Layout des controles sous VC++ en général - une discussion de plus


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut Layout des controles sous VC++ en général - une discussion de plus
    Bonjour,

    Cette discussion est née sur l'analyse de la réponse dans la faq : http://cpp.developpez.com/faq/vc/?pa...#LayoutControl

    Est-ce ce code peut aussi être utilisé sur des bibliothèques d'interface de sociétés tiers comme stingray, bcg, ... c'est à dire faire CTplLayout<CGXDialog> au lieu de CTplLayout<CDialog> par exemple. Il me semble que ce CGXDialog est une couche qui emploie encore à l'intérieur du MFC.
    Enfin, je me demande pourquoi ce redimensionnement ne marche pas (par ex, le resize à partir du bas) très bien dans un code que j'ai écrit en va vite: ftp://ftp-developpez.com/randriano/MfcWithLayout.zip

    Merci d'avance !
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Que pensez du code du genre (je l'ai découvert par hasard en surfant) : son principe est simple, on surcharge le message WM_SIZE ainsi que WM_GETMINMAXINFO pour limiter le resize, il faut alors créer une méthode DeplacerControles() pour gérer aussi le déplacement des éléments à l'intérieur du dialog lors du redimensionnement.

    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
    42
    43
    44
    void JMyDialog::OnSize(UINT nType, int cx, int cy) 
    {
    	CDialog::OnSize(nType, cx, cy);
     
    	if ( IsWindowVisible() )
    	  DeplacerControles(cx,cy);
    }
     
    void JMyDialog::DeplacerControles(int cx,int cy) 
    {
    	m_wndGrid.ShowWindow(SW_HIDE);
    	m_wndGrid.MoveWindow(8,8,cx-16,cy-52);
    	m_wndGrid.ShowWindow(SW_SHOW);
     
    	CWnd* bIdOk = GetDlgItem(IDOK);
    	bIdOk->ShowWindow(SW_HIDE);
    	bIdOk->MoveWindow(cx-174,cy-36,80,24);
    	bIdOk->ShowWindow(SW_SHOW);
     
    	CWnd* bIdCancel = GetDlgItem(IDCANCEL);
    	bIdCancel->ShowWindow(SW_HIDE);
    	bIdCancel->MoveWindow(cx-88,cy-36,80,24);
    	bIdCancel->ShowWindow(SW_SHOW);
     
    	m_StatusBar.MoveWindow(0,0,cx,cy);	
     
    	CRect Rect;
    	m_wndGrid.GetClientRect(&Rect);
    	if ( m_ExtraColunm ) 
    		Rect.right -= 80;
    	m_wndGrid.SetColWidth(0, 0, (Rect.Width()-1)/2);
    	m_wndGrid.SetColWidth(0, 1, (Rect.Width()-1)/2);
     
    	m_wndGrid.Invalidate(TRUE);
    }
     
    void JMyDialog::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
    {
     
    	lpMMI->ptMinTrackSize.x = 520;
    	lpMMI->ptMinTrackSize.y = 200;
     
    	CDialog::OnGetMinMaxInfo(lpMMI);
    }
    Est-ce que c'est faisable et approprié ? L'affichage ne risque-t-il pas de saccader avec ces Invalidate() et ShowWindow(SW_HIDE)/ShowWindow(SW_SHOW)
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  3. #3
    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,
    c'est quoi le probléme avec la classe template ?
    ton exemple fonctionne , je ne vois pas de problème ...
    note:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        AddControl(IDC_BUTTON1,eSizeType::sizeNone,eSizeType::sizeNone);
    ne fera rien du tout ....

  4. #4
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Après mure réflexion, le programme que j'ai envoyé marche mais pourquoi on ne peut pas diminuer mais seulement augmenter. Est-ce que ce template s'applique seulement à des classes mfc ???
    A quoi sert sizeRelative ? Comment maintain distance from right/bottom ou right/top ?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  5. #5
    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 randriano Voir le message
    1)Après mure réflexion, le programme que j'ai envoyé marche mais pourquoi on ne peut pas diminuer mais seulement augmenter.
    2)Est-ce que ce template s'applique seulement à des classes mfc ???
    3)A quoi sert sizeRelative ? Comment maintain distance from right/bottom ou right/top ?
    1) la classe a été pensée pour permettre l'expansion à partir d'une taille initiale .
    le test peut être enlevé ,mais il faudra alors tester les situations anormales : contrôles trop petit etc..
    en général on construit sa fenêtre pour le minimum et on permet l'expansion.
    2) je ne suis pas sûr de bien comprendre la question.., en tout cas le template utilise les classes MFC..
    3) positionnement relatif ça maintient la distance de positionnement du contrôle par rapport au bord de la fenêtre selon l'axe (x ou y)désigné.


    peut être que tout cela sera inutile avec la nouvelle mouture des MFC qui s'annonce avec Visual 2008....

  6. #6
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Donc, la taille initiale d'une fenêtre est la minimale ?
    Est-ce que ce template pourrait supporter des classes non MFC par exemple du framework BCG, je ne sais pas si tu connais ça mais ce framework lui même n'est q'une surcouche utilisant mfc ?
    Pour le 3), un exemple de code please ?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  7. #7
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Le nouveau code que j'ai indiqué semble complet mais je préfère la technique de template !!! Ce code se montre comme supportant tout layout de CWnd mais c'est limité (dialog, dialogbar, formview, propertypage, propertysheet), mais le tien Farscape, il supporte tout descendant de CWnd ???
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  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
    oui tout ce qui descend de CWnd.
    j'ai du quand même faire 2 fonctions d'initialisations différentes pour une dialobar et une CDialog / Formview .
    dans le cas d'un autre type de fenêtre la forme d'initialisation pour les Dialog devrait convenir...

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

Discussions similaires

  1. effectuer des controles sous differents masques
    Par missemael dans le forum Lotus Notes
    Réponses: 0
    Dernier message: 10/08/2012, 12h31
  2. [Débutant] Style sur des controles: FrameworkElement.Style a levé une exception
    Par _NiTo_ dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 28/06/2012, 21h11
  3. Réponses: 1
    Dernier message: 24/10/2010, 09h18
  4. Réponses: 1
    Dernier message: 05/10/2009, 03h50
  5. ajouter des control dans une onglet de sstab sous VB6
    Par aymane_farissi dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/09/2005, 13h44

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