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 :

[VC++ 6] Boutons permettant d'afficher une form


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [VC++ 6] Boutons permettant d'afficher une form
    Bonjour,

    je dois réaliser une appli windows qui permet de lire des fichiers csv et créer un fichier excel.
    J'avais déja réalisé ce programme sous excel en vba mais suite à l'internationalisation du programme (français, japonais, turc....) et des différentes versions d'excel utilisés (95 à XP 2003), certains utilisateurs recontrent des problemes.

    Du coup le choix fut fait de passer ce programme en C++, histoire de ne plus avoir de soucis.
    Cette fois ci les soucis sont pour moi, mes connaissances en C++ étant très limité (pas pratiqué depuis les td de mon bts).

    Mon probleme concerne le changement d'écran permettant le traitement des fichiers. Je m'explique.
    Il y a trois écrans ou plus exactement 3 formview (j'ai créé un projet ayant comme affichage des formview)

    - le premier formview (fichier MainView.cpp) affiche 2 boutons radio proposant une analyse du contenu des fichiers par mois ou par période.

    - le deuxième formview (fichier Month.cpp) affiche ces memes boutons radio, qui serve de navigation, et une listbox contenant la liste de smois disponible, ainsi qu'un simple bouton lancant l'analyse apres sélection du mois.

    - le troisième formview (fichier Period.cpp) affiche les deux boutons radio et 6 listbox pour définir la période choisi (2 listbox pour le jour, le moi et l'année dont un pour le début et l'autre pour la fin de période).

    j'arrive à changer d'affichage en passant par un menu avec ce type de code lancant une fonction SwitchToForm présente dans mon fichier MainFrm.cpp:

    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
    void CMainFrame::SwitchToForm(int nForm){
         CView* pOldActiveView = GetActiveView();
         CView* pNewActiveView = (CView*)GetDlgItem(nForm);
     
         if (pNewActiveView == NULL){
              switch(nForm){
                   case IDD_MAIN_FORM:
                   pNewActiveView = (CView*)new CMainView;
                   break;
     
                   case IDD_MONTH_FORM:
                   pNewActiveView = (CView*)new CMonth;
                   break;
     
                   case IDD_PERIOD_FORM:
                   pNewActiveView = (CView*)new CPeriod;
                   break;
              }
     
              CCreateContext context;
              context.m_pCurrentDoc = pOldActiveView->GetDocument();
              pNewActiveView->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, nForm, &context);
              pNewActiveView->OnInitialUpdate();
         }
     
         SetActiveView(pNewActiveView);
         pNewActiveView->ShowWindow(SW_SHOW);
         pOldActiveView->ShowWindow(SW_HIDE);
     
         ::SetWindowWord(pNewActiveView->m_hWnd, GWL_ID, AFX_IDW_PANE_FIRST);
         RecalcLayout();
         delete	pOldActiveView;
    }
    l'appel de cette fonction se fait comme cela sur le menu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void CMainFrame::OnForm1() {
         SwitchToForm(IDD_MAIN_FORM);	
    }
    void CMainFrame::OnUpdateForm1(CCmdUI* pCmdUI) {
         pCmdUI->Enable(GetActiveView()->GetRuntimeClass()!=RUNTIME_CLASS(CMainView));
    }
    Or je souhaite que ce changement se fasse lors du click sur le bouton radio.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void CMainView::OnReportType0() 
    {	
    }
    Quel propriété dois je employer pour éaliser cette action.
    S'il faut je suis pret à passer sou Visual Studio.net, s'il y a un code plsu pratique

    Pardon pour la longueur de l'explication du débutant niveau 0 que je suis en C++, et merci pour votre aide

  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,
    c'est quoi qui te bloques l'acces a la mainfram a partir de la view ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci de m'aider.

    j'ai tenté cette action sur mon bouton radio afin d'afficher le formview du mois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void CTAGHeuerReportingView::OnReportType1(CCmdUI* pCmdUI)
    {
         CMainFrame::SwitchToForm(IDD_MONTH_FORM);
    }
    la réponse est sans appel : illegal call of non-static member function
    je comprends bien qu'il faut que je modifie la déclaration de ma fonction SwitchToForm, mais je ne sais pas trop quoi mettre.

    La fonction est déclarée dans mon fichier ManFrame.cpp et le bouton radio se trouve sur MainView.cpp, comportant un #include "MainFrm.h" et #include "Month.h"
    void SwitchToForm(int nForm); // nForm est l'indice de ma formview dans le fichier Ressource.h
    au final je ne sais pas ce que je dois écrire pour afficher ma formview.
    dois je écrire

  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
    salut,
    il recuperer un pointeur sur la mainframe et le caster sur un pointeur de ta classe .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ( (CMainFrame*)AfxGetMainWnd())->SwitchToForm(IDD_MONTH_FORM);

Discussions similaires

  1. bouton permettant d'afficher une zone de texte
    Par mioke dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 11/12/2008, 17h46
  2. Afficher une form en cliquant sur un bouton
    Par Jinx_ dans le forum Débuter
    Réponses: 4
    Dernier message: 10/02/2008, 18h18
  3. [VB.NET] Clic sur un bouton pour afficher une form existante
    Par beegees dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/06/2006, 10h31
  4. Afficher une form ou un cadre dans un panel
    Par miniil dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2005, 00h54
  5. Gérer les boutons Minimize,Close d'une forme
    Par Chupakabra dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2005, 11h42

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