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 :

Gérer dynamiquement les Splitters et les Vues.


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut Gérer dynamiquement les Splitters et les Vues.
    Bonjour à tous,
    Je galère toujours autant avec la gestion des splitters dans une SDI.
    Je résume mon problème: dans une SDI, je crée des splitters et 5 FormView.
    Quand les splitters sont créés par m_wndSplitter.CreateStatic(this, 1, 2)) tout fonctionne bien mais je ne peux pas supprimer et re-créer un splitter et quand j'utilise m_wndSplitter.Create(this, 1, 2, CSize(50, 50),pContext)), j'ai une erreur de compilation.

    Quelqu'un aurait-il une solution pour gérer dynamiquement Splitter et FormVue.
    Merci d'avance.

  2. #2
    Membre confirmé Avatar de riadh_ado
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Par défaut
    Slt avec le SDI on ne peut pas crée qu'une seul View donc pour ton exercice il te faut un projet MDI pas SDI
    Donc voila un exmple comment on crée un splitter dans un projet MDI

    Voila un exemple comment on crée un spilter avec 2View tu peux le généralisé comme tu veux

    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
    BOOL CSplitter::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
    {
    if (!m_wndSplitter.CreateStatic(this, 1, 2))
    {
    TRACE0("Failed to CreateStaticSplitter\n");
    return FALSE;
    }
    if (!m_wndSplitter.CreateView(0, 0,
    RUNTIME_CLASS(CFormulaire), CSize(300, 0), pContext))
    {
    TRACE0("Failed to create first pane\n");
    return FALSE ;
    }
    if (!m_wndSplitter.CreateView(0, 1,
    RUNTIME_CLASS(CDemoView), CSize(0, 0), pContext))
    {
    TRACE0("Failed to create second pane\n");
    return FALSE;
    }
    SetActiveView((CView*)m_wndSplitter.GetPane(0,1));
    return TRUE;
    }

    Ne pas oublier d’inclure les fichiers contenant le code des classes utilisées par le splitter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "Formulaire.h"
    #include "DemoView.h"

    Et bien sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(
    IDR_DEMOTYPE,
    RUNTIME_CLASS(CDemoDoc),
    RUNTIME_CLASS(CSplitter),
    RUNTIME_CLASS(CDemoView));
    AddDocTemplate(pDocTemplate);

  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
    Citation Envoyé par elecstr
    Bonjour à tous,
    Je galère toujours autant avec la gestion des splitters dans une SDI.
    Je résume mon problème: dans une SDI, je crée des splitters et 5 FormView.
    Quand les splitters sont créés par m_wndSplitter.CreateStatic(this, 1, 2)) tout fonctionne bien mais je ne peux pas supprimer et re-créer un splitter et quand j'utilise m_wndSplitter.Create(this, 1, 2, CSize(50, 50),pContext)), j'ai une erreur de compilation.

    Quelqu'un aurait-il une solution pour gérer dynamiquement Splitter et FormVue.
    Merci d'avance.
    salut,
    Sans l'erreur en question et la ligne de code concernée, comment veux-tu que l'on réponde ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Salut à tous,
    Désolé pour le manque d'informations. J'ai été léger sur ce coup là.

    Je suis dans l'obligation de continuer en SDI car les différentes vues dans les splitters sont toutes liées à un périphérique via une carte PCI et elles doivent travailler sur le même noyau.

    En fait, il n'y a pas d'erreur de compilation mais l'erreur suivante au lancement de l'application.

    Debug Assertion failed!
    File winspilt.cpp
    Line: 255.
    Ce problème ne se pose que dans le cas suivant
    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
     
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    	if (!m_wndSplitter.CreateView(0, 0,
    		RUNTIME_CLASS(CForm_RXD), CSize(0, 300), pContext))
    		{
    			TRACE0("Pb a la creation du 1er splitter \n");
    			return FALSE;
    		}
     
    	// création du 2eme splitter
    	if (!m_wndSplitter2.Create (
    		&m_wndSplitter,						// la fenêtre parent est le 1er splitter
    		1, 3,								// 0 ligne, 3 colonnes
    		CSize(0,0),							// taille x, y
    		pContext,
    		WS_CHILD|WS_VISIBLE|WS_BORDER,		// WS_BORDER est nécessaire
    		m_wndSplitter.IdFromRowCol(1, 0) ))	// Splitter 2 dans 2eme colonne
    		{
    			TRACE0("Pb a la creation du splitter 2\n");
    			return FALSE;
    		}
     
    	// création des vues du splitter 2
    	if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CForm_TXD), CSize(250, 0), pContext) ||
    		!m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(CEsComProView), CSize(250,0), pContext) ||
    		!m_wndSplitter2.CreateView(0, 2, RUNTIME_CLASS(CEsComProView), CSize(0,0), pContext))
    	{
    		m_wndSplitter2.DestroyWindow();
    		return FALSE;
    	}
    	return TRUE;
    }
    En revanche, dans le cas suivant, tout va bien.
    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
     
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    	// création du splitter de base
    	if (!m_wndSplitter.CreateStatic(
    		this,
    		2,				// ligne
    		1))				// colonne
    		return FALSE;
    	// création de la vue
    	if (!m_wndSplitter.CreateView(0, 0,
    		RUNTIME_CLASS(CForm_RXD), CSize(0, 300), pContext))
    		{
    			TRACE0("Pb a la creation du 1er splitter \n");
    			return FALSE;
    		}
     
      // création du 2eme splitter
    	if (!m_wndSplitter2.CreateStatic(
    		&m_wndSplitter,						// la fenêtre parent est le 1er splitter
    		1, 3,								// 1 ligne, 3 colonnes
    		WS_CHILD|WS_VISIBLE|WS_BORDER,		// WS_BORDER est nécessaire
    		m_wndSplitter.IdFromRowCol(1, 0) ))	// Splitter 2 dans 2eme ligne
    		{
    			TRACE0("Pb a la creation du splitter 2\n");
    			return FALSE;
    		}
     
    	// création des vues du splitter 2
    	if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CForm_SPACE), CSize(250, 0), pContext) ||
    		!m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(CForm_TXD), CSize(250,0), pContext) ||
    		!m_wndSplitter2.CreateView(0, 2, RUNTIME_CLASS(CEsComProView), CSize(0,0), pContext))
    	{
    		m_wndSplitter2.DestroyWindow();
    		return FALSE;
    	}
    	return TRUE;
    }
    Tous les codes que j'ai consultés utilisent toujours la méthode .CreateStatic
    Si vous avez une idée, je suis preneur.
    merci d'avance.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/08/2007, 12h46
  2. Réponses: 4
    Dernier message: 11/09/2006, 16h55
  3. Les polices dans les tables et les requêts
    Par zooffy dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 11h06

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