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] Insertion de Toolbar


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Par d�faut [MFC] Insertion de Toolbar
    Bonsoir � tous,

    alors, je poste ce sujet, car je n'arrive pas � me d�patouiller avec une CToolBar, la MSDN, les FAQ, et les posts d�ja pr�sents sur le forum...

    Alors, voila, je voudrais inserer une CToolBar dans mon appli MFC.

    Donc, j'ai cr�� une ToolBar, nomm�e IDR_TOOLBAR1 dans l'editeur de ressources de VS2005.

    Ensuite, dans mon OnInitDialog de mon appli, j'ai suivi ce qui �tait dit dans la MSDN, c'est � dire, ce code ci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
            CToolBar toolbar;
    	toolbar.Create(this,CBRS_TOP,IDD_FIRSNAKE_DIALOG);
    	toolbar.LoadToolBar(IDR_TOOLBAR1);
    Je n'ai pas d'erreur � ce niveau.

    Par contre, apr�s compilation, lors du lancement de mon appli, pas de toolbar en vue...

    Ce qui me chagrine, c'est que je cr�� ma toolbar, mais je ne "l'incruste" pas dans ma fenetre, et je n'ai pas trouv� la methode pour...
    donc, quelqu'un pourrait-il m'expliquer le principe de mise en place des toolbars sous VS2005 utilisant MFC ??

    Merci,
    Sebpsi.

  2. #2
    Membre �m�rite
    Avatar de Spout
    Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    904
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 904
    Par d�faut
    Essaye de recopier scrupuleusement l'exemple de la FAQ (ici) pour apr�s revenir � ce que toi tu veux, tu y arriveras s�rement mieux! Bon courage

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Par d�faut
    alors, le probleme, c'est que si j'ai bien compris la FAQ, normalement on a une methode deja existante que s'appelle "OnCreate()". Or, pour mon appli qui s'appelle FIR-Snake, bas�e sur les MFC, ma classe m�re s'appelle FIR-Snake.h, avec la cr�ation de la boite de dialogue dans la classe FIR-SnakeDlg.h...

    Or, dans cette classe m�re, il n'existe aucune m�thode OnCreate()...

    J'ai seulement la m�thode InitInstance()... Et, ca ne fonctionne pas dans la m�thode InitInstance()...

    Donc, je ne vois vraiment pas comment faire...

  4. #4
    Membre �m�rite
    Avatar de Spout
    Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    904
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 904
    Par d�faut
    Le OnCreate, c'est la m�thode CWnd dans laquelle tu peux mettre les initialisations de ta bo�te de dialogue, c'est une m�thode � surcharger. Dans ta classe de dialogue, FIR-SnakeDlg, tu dois impl�menter la OnInitDialog() et mettre tes initialisations (donc la cr�ation de ta toolbar) dedans.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Par d�faut
    C'est donc bien ce que j'avais fait dans mon 1er message...

    La fonction donn�e dans la FAQ permet juste d'avoir un TRACE en mode debug...

    Sinon, elle ne fait que creer la toolbar...

    Et si on regarde bien, j'avais ecrit a peu pres pareil, mais sans le TRACE...

    J'ai donc repris leurs parametres de creation de toolbar, en adaptant bien sur le nom de mon toolbar (IDR_TOOLBAR1), mais rien n'y fait...

    Je crois que l'on tourne en rond...

  6. #6
    Membre �m�rite
    Avatar de Spout
    Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    904
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 904
    Par d�faut
    Excuse-moi d'insister, mais si je vois bien l'exemple de la FAQ:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     ...
    if(!m_ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP) || !m_ToolBar.LoadToolBar(IDR_TOOLBAR))
    ...
    il y a des flags genre WS_VISIBLE que tu n'as plus par d�faut si tu mets autre chose � la place (CBRS_TOP dans ton cas). Libre � toi de mettre autre chose que les valeurs par d�faut pour le deuxi�me param�tre, mais il faut (je pense) au moins mettre le flag WS_VISIBLE non? Et peut-�tre m�me WS_CHILD. Je n'ai pas essay�, je ne te certifie pas que �a va marcher, mais quand je te disais de recopier scrupuleusement la FAQ, c'est justement pour voir l'influence de ce genre de modifications.
    Tiens-moi au courant.

  7. #7
    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 sebpsi
    C'est donc bien ce que j'avais fait dans mon 1er message...

    La fonction donn�e dans la FAQ permet juste d'avoir un TRACE en mode debug...

    Sinon, elle ne fait que creer la toolbar...

    Et si on regarde bien, j'avais ecrit a peu pres pareil, mais sans le TRACE...

    J'ai donc repris leurs parametres de creation de toolbar, en adaptant bien sur le nom de mon toolbar (IDR_TOOLBAR1), mais rien n'y fait...

    Je crois que l'on tourne en rond...
    salut,
    ton code ne risque pas de fonctionner,
    parce qu'il n'est pas positionn� au bon endroit :
    il doit �tre dans la mainframe pour du SDI,et dans la mdichild pour du MDI.
    quand aux arguments tu es loin du compte ...
    tu devrais tenir compte des remarques et conseils de spoutspout...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Par d�faut
    bon, alors, il est vrai, et je l'ai admis que les parametres que j'avais mis dans mon 1er message n'etaient pas exacts.

    Par contre, j'ai bien dis dans mon 2eme message que j'avais recopi� les param�tres de la FAQ.

    De plus, j'ai fait 2 essais:

    Le 1er, dans la m�thode OnInitDialog() avec un copier-coller exact de la FAQ. Rien n'est apparu. M�me pas ma fenetre.... ca m'a sorti une erreur de violation d'acces m�moire. voici le code que j'ai mis:

    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
    BOOL CFIRSnakeDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
     
    	// Ajouter l'élément de menu "À propos de..." au menu Système.
     
    	// IDM_ABOUTBOX doit se trouver dans la plage des commandes système.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
     
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
     
    	if(CFIRSnakeDlg::OnInitDialog() == -1) return -1;
        // CToolBar  m_ToolBar;
        if(!m_ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP) || 
                                         !m_ToolBar.LoadToolBar(IDR_TOOLBAR1))
        {
            TRACE0("Failed to create toolbar\n");
            return -1;      // fail to create
        }
        return 0;
     
    	// Définir l'icône de cette boîte de dialogue. L'infrastructure effectue cela automatiquement
    	//  lorsque la fenêtre principale de l'application n'est pas une boîte de dialogue
    	SetIcon(m_hIcon, TRUE);			// Définir une grande icône
    	SetIcon(m_hIcon, FALSE);
     
    return TRUE;  // retourne TRUE, sauf si vous avez défini le focus sur un contrôle
    }
    Bien sur, ce rajout de code me semble bizarre, car ma fonction OnInitDialog renvoie un BOOL et non un int.

    Ensuite, j'ai essay� sans tout ces return, mais en laissant la condition:

    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
    BOOL CFIRSnakeDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
     
    	// Ajouter l'élément de menu "À propos de..." au menu Système.
     
    	// IDM_ABOUTBOX doit se trouver dans la plage des commandes système.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
     
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
     
    	//if(CFIRSnakeDlg::OnInitDialog() == -1) return -1;
        // CToolBar  m_ToolBar;
        if(!m_ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP) || 
                                         !m_ToolBar.LoadToolBar(IDR_TOOLBAR1))
        {
            TRACE0("Failed to create toolbar\n");
            //return -1;      // fail to create
        }
        //return 0;
     
    	// Définir l'icône de cette boîte de dialogue. L'infrastructure effectue cela automatiquement
    	//  lorsque la fenêtre principale de l'application n'est pas une boîte de dialogue
    	SetIcon(m_hIcon, TRUE);			// Définir une grande icône
    	SetIcon(m_hIcon, FALSE);
     
    return TRUE;  // retourne TRUE, sauf si vous avez défini le focus sur un contrôle
    }
    Et la, mon code se g�n�re sans problemes, mais ma ToolBar n'apparait pas...

    Alors, si je vous ai bien suivi, j'ai initialis� ma ToolBar dans OnInitDialog(), ce que vous m'aviez dit, j'ai scrupuleusement recopi� la FAQ, mais ca ne fonctionne pas...

    PS: j'ai bien sur cr�� ma ToolBar dans le fichier .h comme attribut Protected.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Par d�faut
    Citation Envoy� par farscape
    salut,
    ton code ne risque pas de fonctionner,
    parce qu'il n'est pas positionn� au bon endroit :
    il doit �tre dans la mainframe pour du SDI,et dans la mdichild pour du MDI.
    quand aux arguments tu es loin du compte ...
    tu devrais tenir compte des remarques et conseils de spoutspout...
    Qu'entends tu par mdichild concretement ??

    Pcq, j'ai les bases de la prog (l'algorithmie), mais je debute en C++, et particulierement en MFC.... Donc, SDI, MDI, ca ne me parle pas trop...

    Si tu pouvais m'expliquer, en prenant un projet fictif, qui est la mdichild, etc....


    merci...

  10. #10
    Membre �m�rite
    Avatar de Spout
    Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    904
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 904
    Par d�faut
    MDI c'est pour Multiple Document Interface et SDI c'est pour Single Document Interface. En gros, soit t'as plusieurs fen�tres, soit une seule.
    Dans le OnInitDialog (cas d'un CDialog) ou de le OnCreate() (cas d'une frame), si tu recopies exactement l'exemple de la FAQ, tu n'auras normalement pas de probl�me. Si �a ne marche toujours pas, alors ton probl�me ne vient pas de l�.
    Bon courage

Discussions similaires

  1. R�ponses: 1
    Dernier message: 29/06/2007, 15h13
  2. [MFC] Insertion d'une chaine de caract�re dans une BD
    Par julien.nasser dans le forum MFC
    R�ponses: 2
    Dernier message: 20/04/2006, 15h19
  3. [MFC] Redimensionnement de ToolBar
    Par windsurfeur44 dans le forum MFC
    R�ponses: 7
    Dernier message: 15/09/2004, 19h43
  4. [MFC][Toolbar] Aligner les toolbars
    Par 6psyk9 dans le forum MFC
    R�ponses: 3
    Dernier message: 17/05/2004, 21h58

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