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/SDI] Création de fenetre en dérivant de CWnd=>OK?


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut [MFC/SDI] Création de fenetre en dérivant de CWnd=>OK?
    Salut,

    Je développe une petite appli SDI.
    Et je voudrais pouvoir ouvrir une fenetre secondaire du type palette que l'on trouve souvent dans des applis plus pro.

    A la base, j'ai voulu créer un classe dérivant directement de CWnd, mais quand je demande a créer une classe de la sorte grace aux Wizards, je n'ai pas CWnd dans la liste... Bien sur, je suppose que je peux dériver "a la main", mais vu que le Wizard ne me propose pas la classe CWnd par défaut, je me demande si c'est bien conseillé de faire de la sorte?

    Pour le moment, je me contente donc d'une fenetre Win32 avec un procédure de fenetre, et une WNDCLASS.

    Est il donc possible de passer par une CWnd?

    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 tu peux eventuellement faire une CDialogBar flottante ,
    c'est facile a mettre en place ..

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut
    Merci,

    Le concept aurait pu être intéressant, mais le seul problème, c'est que j'aurais aimé que la fenêtre ne soit pas limitée à la zone cliente de la fenêtre parent, mais à tout l'écran.

    Par contre, le fait de pouvoir utilier un Dialog Template me plaît bien (mais n'est pas le critère primordial)

    Une autre idée?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut
    Nan, pas d'autre idée?

    Au mois savoir si c'est propre de dériver de CWnd?

  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
    salut,
    ben je vois pas le pb j'ai deja fais ça pour des fenetres internes.
    si c'est avec vc6 tu choisis generic CWnd dans classwizard au moment de la creation .

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut
    Oui, mais le probleme en faisant une Generic Class, c'est que je ne peux pas y avoir accès dans le ClassWizard... (ce qui n'est quand même pas très pratique...)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut

  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
    salut,
    ben je vois pas ton probleme ,
    j'ai refais un essai rapide ça fonctionne bien ,dans class wizard je peux voir les messages de la class generée.
    ou est le pb ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut
    Ah bon?

    Je dois alors faire une mauvaise manip...

    Je viens encore de réessayer et ca ne marche pas...

    J'ai créé un nouveau projet SDI.
    Ensuite, je crée une nouvelle classe (click droit dans l'explorateur de classes => new class). Ensuit, je demande "Generic Class" et je mets "CWnd" pour la "Base Class"

    Et ensuite, je vais dans le ClassWizard (CTL+W) et dans la combo "Class Name", ma nouvelle classe n'y est pas....

  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
    salut,
    j'ai refais l'essai avec tes manips ça fonctionne ,tu dois avoir un probleme avec ton classview .
    voir faq:
    http://c.developpez.com/faq/vc/?page=IDE#MakeClassView

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut
    Arf....

    J'ai bien vérifier et le fichier .h est bien dans le répertoire Header Files du projet.

    Alors, j'ai essayé d'effacer le fichier clw, opt et ncb. Il m'a donc demandé si je voulais regénérer la ClassWizard database, et j'ai dit que oui....

    Mais là, ma classe n'apparaît toujours pas (et pourtant le header et le source correspondant sont bien sélectionnés lorsque ma ClassWizard database se regénère....) Quelle est donc la fausse manip que j'ai faite?

    On parle bien d'une Generic Class?

    Voici le code généré pour le .h:

    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
     
    // MyWnd.h: interface for the CMyWnd class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #if !defined(AFX_MYWND_H__FAD1B2B9_5AD5_4D16_A382_23D0EACE3997__INCLUDED_)
    #define AFX_MYWND_H__FAD1B2B9_5AD5_4D16_A382_23D0EACE3997__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
     
    class CMyWnd : public CWnd  
    {
    public:
    	CMyWnd();
    	virtual ~CMyWnd();
     
    };
     
    #endif // !defined(AFX_MYWND_H__FAD1B2B9_5AD5_4D16_A382_23D0EACE3997__INCLUDED_)
    Sinon, je ne sais pas si ça a un lien, mais au moment de créer la class, Visual me dit:
    ---------------------------
    Microsoft Visual C++
    ---------------------------
    The New Class Wizard could not find the appropriate header file(s) to include for the base class(es) CWnd. If you choose to derive from the class(es) anyway, you may need to manually add the appropriate header file(s) to D:\VCProjects\SDIToDelete\MyWnd.h.
    ---------------------------
    OK Annuler
    ---------------------------
    Normal?

  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
    non c'est pas normal
    voila ma classe générée:
    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
     
    /////////////////////////////////////////////////////////////////////////////
    // CMyClass window
    class CMyClass : public CWnd
    {
    // Construction
    public:
    	CMyClass();
     
    // Attributes
    public:
     
    // Operations
    public:
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CMyClass)
    	//}}AFX_VIRTUAL
     
    // Implementation
    public:
    	virtual ~CMyClass();
     
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CMyClass)
    		// NOTE - the ClassWizard will add and remove member functions here.
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    on parle de bien vc6.0 ?
    verifie que dans tools option directories
    show directories for= includes files.
    tu as bien :
    C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE // si le sdk est installé
    C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
    C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
    C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE

    Sources:
    C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC
    C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
    C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
    C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut
    Ah oui, effectivement, quand je vois le source de ton Include, je comprends que le ClassWizard ait toutes les infos dont il a besoin pour travaçiller correctement.

    J'ai donc checké les Directories et tout est OK (sauf pour le SDK car je ne l'ai pas installé pour le moment - il s'agit d'une install toute fraîche)

    Mais quand tu fais "New Class", tu indiques bien que tu veux une Generic Class et non une class MFC, n'est ce pas?

    Et sinon, juste pour essayer de comprendre d'où vient le problème, quand tu dis que tu veux une class MFC, te propose t il CWnd dans la liste des classes de base ou pas? Car ici, il ne me le propose pas....

    Il doit bien y avoir une raison?

    Merci en tout cas d'essayer de m'aider!

  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
    arf ,c'est ça ton erreur !!! ,laisse MFC classe et en dessous dans le selecteur de classe de base choisis generic CWnd

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut
    Bah c'est ce que disais depuis le début, quand je demande à créer une nouvelle classe MFC, dans la liste déroulante des classes de base dispo, il n'y a pas CWnd! C'est pour ça que je dois passer par "Generic Class" lorsque je crée une nouvelle classe....

    Dans la liste des classes de base dispo, il y a cView, puis CWinThread, mais pas de CWnd...

    Why?

  16. #16
    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
    mais si dans le selecteur base classe :
    l'avant derniere ligne c'est generic CWnd ...
    et avec le selecteur class type = MFC Class

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut
    Arf....

    C'était donc ça!

    Ca marche...

    Hmmmmm, honnêtement, pourquoi ont ils mis "Generioc" devant.... A cause de ça, la classe elle même n'apparaît pas au bon endroit (ordre alphabétique....)

    Merci beaucoup!

    Vu que tu as l'air de bien connaître cet IDE, ai je le droit à une qurestion Bonus?

    Allez, je me lance...

    Par moments, sous Visual C++, lorsque je mets un objet et que je met le "." pour ensuite mettre le nom d'un membre de l'objet,; par moments, Visual ne me propose pas la liste automatique des membres de la classe.... Autrement dit, je dois taper le memebre à la main, et surtout, j'ai intérêt à connaître sa syntaxe par coeur.... Pourquoi donc? Que dfaire pour pallier à ça? Existe t il un moyen de faire apparaître cette liste quand elle n'apparaiît pas automatiquement?

    Merci

  18. #18
    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
    les raisons principales sont celles evoquées dans le post precedent en lien avec la faq pour le classview .
    Avant toute chose vérifier que les includes des classes sont bien situés dans le dossier «headers files» et non dans le dossier « external dependencies » .
    Si ce n'est pas le cas procéder à un glisser déplacer avec la souris des fichiers dans le dossier «headers files».
    Pour regénérer le « ClassView » la méthode la plus directe consiste à :
    et le classview non a jour .
    a pres si les entetes des classes ne sont pas propres : mauvais copier coller et pertubation des commentaires génerés par visual .

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 79
    Par défaut
    D'accord, merci.

    Lorsque le problème se reposera, je veillerai à vérifier que mes headers sont au bon endroit.

    Alors, sinon, pour en revenir au sujet principal...

    Tu m'as parlé des CDialogBar, et je trouve finalement l'approche intéressante (cad pouvoir profiter de l'environnement de développement pour placer ses contrôles)
    Le seul problème, c'est que ces DialogBar (à l'instar de n'importe quelle fenêtre avec lle style WS_CHILD, restent confinées à l'intérieur de la zone client....
    Serait il possible d'obtenir le même genre de fonctionnalité, mais avec une fenêtre pouvant sortiir de la zone client de la fenêtre principale?

  20. #20
    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
    re ,
    non il n' y a pas de pb la dialog bar flotte n'importe ou meme en dehors de l'application .
    exemple sur un projet MDI sur la child:
    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
     
    int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    	if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
    		return -1;
     
    	// TODO: Add your specialized creation code here
    	if (!m_DlgBar.Create(this, IDD_DIALOGBAR,
          CBRS_RIGHT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_DIALOGBAR))
       {
          TRACE0("Failed to create DlgBar\n");
          return -1;      // fail to create
       }
    	m_DlgBar.EnableDocking(CBRS_ALIGN_ANY); 
    	EnableDocking(CBRS_ALIGN_ANY); 
    	DockControlBar(&m_DlgBar);	
    	return 0;
    }

Discussions similaires

  1. MFC SDI "La création d'un document vide a echoué"
    Par kinhelios dans le forum MFC
    Réponses: 14
    Dernier message: 17/03/2008, 11h48
  2. création de fenetre mfc
    Par oclone dans le forum MFC
    Réponses: 2
    Dernier message: 22/12/2006, 13h43
  3. Réponses: 5
    Dernier message: 10/05/2006, 13h33
  4. [MFC/SDI] BMP a la place d'un bouton
    Par gargle dans le forum MFC
    Réponses: 2
    Dernier message: 28/07/2004, 11h26
  5. Réponses: 4
    Dernier message: 14/06/2004, 09h29

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