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 :

Une barre de defilement dans un projet non document/view ?!?


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2002
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 4
    Par d�faut Une barre de defilement dans un projet non document/view ?!?
    Bonjour, je cherche � ajouter une barre de d�filement horizontale � ma fen�tre client mais dans un projet qui ne supporte pas l'architecture document/View. J'ai essay� la m�thode, indiqu�e dans les livres et sur de nombreux sites, qui s'applique � des projets document/View et qui consiste � d�river la classe CNomDeMonProjetView de la classe CScrollView au lieu de la classe CView. J'ai donc essay� de d�river la classe CChildView de CScrollView au lieu de CWnd mais ca ne compile pas... :-(
    J'esp�re que quelqu'un pourra m'aider, a+, Eljun09

  2. #2
    mat.M
    Invit�(e)
    Par d�faut
    Cela ne compile pas ??
    Plus de pr�cisions , merci

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2002
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 4
    Par d�faut
    La m�thode indiqu�e dans les livres dit de remplacer toutes les occurences de la classe CView par CScrollView. Elle dit d'appeler CScrollView::SetScrollSizes( avec quatres param�tres) dans CStageView::OnInitialUpdate(). Comme je voudrais ne pas utiliser le modele Document/View j'ai cr�� un projet MFC AppWizzard(exe) en cochant "Single Document" et en d�cochant "Document/View architecture support ?" et sans rien modifier d'autre. J'ai ensuite modifi� toutes les occurences de la classe CWnd par CScrollView (pour deriv� ma classe CChildView de CScrollView au lieu de CWnd). Au passage je me demande si je dois aussi modifier l'ent�te de la fonction OnSetFocus qui ne se trouve pas dans les fichiers relatifs � ma vue mais ceux relatifs � MainFrame ?!? Bref, je compile et j'obtient :

    ...\mainfrm.h(46) : error C2259: 'CChildView' : cannot instantiate abstract class due to following members:
    ...\childview.h(15) : see declaration of 'CChildView'
    ...\mainfrm.h(46) : warning C4259: 'void __thiscall CScrollView::OnDraw(class CDC *)' : pure virtual function was not defined
    c:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(3752) : see declaration of 'OnDraw'

    Voila, je t'ai indiqu� ce que j'ai fait tu n'auras donc aucun mal, si tu le d�sires � obtenir le meme message d'erreur...
    En esp�rant que tu comprennes pourquoi je ne peux pas d�riv� ma classe CChilView de CScrollView je te remercie de t'etre d�j� pench� sur le sujet... ciao, eljun09

  4. #4
    mat.M
    Invit�(e)
    Par d�faut
    Il faut apparemment utiliser la macro DYNCREATE(CChildView,CScrollView) qui permet d'instancier en dynamique une classe d'objet...
    Mais si cela n'est pas la solution , pourquoi ne pas utiliser l'architecture Doc/View ? car sans ce m�canisme , il faut tout prendre en charge...

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2002
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 4
    Par d�faut
    Encore merci de m'accorder de votre temps ! Mais je n'ai toujours pas r�solu mon probl�me. Je d�bute dans le visual c++. J'ai donc cherch� dans mes livres (ceux publi�s par microsoft) comment utiliser la macro DYNCREATE. En inc�rant DECLARE_DYNCREATE(CChildView) dans la d�claration de la classe CChildView et IMPLEMENT_DYNCREATE(CChildView, CScrollView) dans le fichier CChildView.cpp, rien n'a chang� et j'obtenais les m�mes messages d'erreurs. Dans le livre il parle de devoir utiliser la macro RUNTIME_CLASS. J'ai donc cherch� � comprendre comment l'utiliser...
    Dans mes diverses tentatives j'ai aussi essay� d'utiliser la macro DYNAMIC � la place et de cr�er dynamiquement un objet. Pour cela, j'ai d�clar� la variable membre m_wndView de la classe MainFrame non pas comme une instance de la classe CChildView mais comme un pointeur vers un objet de cette classe (que j'ai nomm� m_pwndView). Ainsi la compilation passait, mais il me restait � initialiser ce pointeur. J'ai donc voulu le faire dans le constructeur de MainFrame. J'y ai tapp� les deux lignes de codes indiqu�es dans mon livre comme cr�ant un objet dynamiquement :
    CMainFrame::CMainFrame()
    {
    CRuntimeClass *pRTC = RUNTIME_CLASS(CChildView) ;
    m_pwndView = (CChildView*)pRTC->CreateObject() ;
    }
    La compilation passait toujours mais, je ne sais pourquoi, la fonction CreateObject() me renvoie null donc par voie de cons�quence mon pointeur vaut NULL et du coup lorsque je l'utilise j'ai un message d'erreur comme quoi j'acc�de � une zone m�moire invalide ce qui est tout � fait normal.
    Ce n'est qu'en commencant � tapper ce message que je me suis rendu compte que je n'utilisais alors plus la macro que vous m'aviez conseill� mais la macro DYNAMIC. J'ai donc essay� de faire le remplacement et je me suis retrouv� avec les m�mes erreurs qu'au tout d�but, c'est � dire celles qui m'ont amen�es � poser la question initiale sur le forum.
    Avez vous une id�e de comment je pourrais proc�der maintenant ?!?

    Sinon, pourquoi ne pas utiliser une architecture document/view ? Et bien en fait, je dois prendre en entr�e deux fichiers de m�mes noms mais avec des extentions diff�rentes. Je veux donc que, quand l'utilisateur clic sur Fichier/Ouvir/Ok (apr�s avoir selectionner un nom de fichier), le programme me renvoie uniquement le nom du fichier et me laisse la main pour ouvrir moi m�me les deux fichiers. Comme beaucoup de code nous est cach�, je n'ai pas trouv� d'hiniber l'ouverture du fichier s�lectionn� et de placer mes propres instructions ce qui m'a ammen� � me rabattre sur un projet sans mod�le document/view �tant donn� que les actions ouvrir et enregistrer que je veux faire sont facilement impl�mentable gr�ce aux fen�tres communes de windows... L'inconv�nient �tant que toutes les techniques d�crites dans les livres sont bas�es sur l'architecture document/view et donc j'ai beaucoup de difficult�s � les appliquer comme vous pouvez d'ailleurs le voir !!!

  6. #6
    mat.M
    Invit�(e)
    Par d�faut
    Sinon, pourquoi ne pas utiliser une architecture document/view ? Et bien en fait, je dois prendre en entr�e deux fichiers de m�mes noms mais avec des extentions diff�rentes. Je veux donc que, quand l'utilisateur clic sur Fichier/Ouvir/Ok (apr�s avoir selectionner un nom de fichier),
    Si vous �pluchez bien les livres consacr�s � la question ( lesquels justement ? ) et le MSDN , vous sauriez qu'il faille red�finir l'appel de ces fonctionnalit�s ( en anglais override method ) . Donc dans la classe document ou vue au choix avec ClassWizard il faut red�finir le code de Nouveau Fichier soit CDocument::OnNewDocument() � red�finir...
    Cela �quivaut � une CDialog et la m�thode OnOk() qui refermer ladite boite de dialogue lorsqu'on appuie sur entr�e

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2002
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 4
    Par d�faut
    Je vous remercie, en effet, en red�finissant la fonction membre OnOpenDocument de la classe Document j'arrive � r�cuperer le nom du fichier selectionn� par l'utilisateur, je peux ainsi ouvrir les fichiers comme je le d�sire et en utilisant l'architecture document/view je n'aurais plus de probl�mes pour le d�filement...
    Je soups�onne cependant que le fichier soit tout de m�me ouvert et que, par suite, l'application l'ouvre en fait deux fois. J'ai lu qu'en fait une instance de la classe CFile �tait cr��e lors du processus ainsi qu'une instance de la classe CArchive attach�e � l'objet CFile. Ensuite c'est par l'interm�diaire de l'archive que se font toutes les manipulations. Je me demande alors s'il n'y aurait pas moyen, d'acc�der directement � l'objet CFile d�j� cr�� ce qui m'�viterai d'ouvrir plusieurs fois le m�me fichier...
    Cordialement, eljun09

    Si quelqu'un connait cependant la solution pour ins�rer une barre de d�filement � un projet qui ne supporte pas l'architecture Document/View, je reste � l'�coute de toute proposition pour ma culture personnel ainsi que pour fournir une solution � ceux qui seraient confront�s au m�me probl�me et qui espereraient trouver une solution en venant ici...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [XL-2007] Mettre une barre de defilement dans un userform
    Par Nokho dans le forum Macros et VBA Excel
    R�ponses: 5
    Dernier message: 09/06/2022, 15h43
  2. R�ponses: 4
    Dernier message: 25/11/2006, 17h52
  3. Mettre une barre de d�filement dans une CheckListBox ?
    Par Invit� dans le forum Composants VCL
    R�ponses: 2
    Dernier message: 21/07/2005, 09h39
  4. barre de defilement dans une div
    Par barbarius dans le forum G�n�ral JavaScript
    R�ponses: 7
    Dernier message: 23/06/2005, 14h19

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