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] CSplitterWnd et SetFocus


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Par d�faut [MFC] CSplitterWnd et SetFocus
    Bonjour,

    je bosse en ce moment sur une application SDI splitt�e en 2 vues

    voir :

    http://schafik.free.fr/img/shot.jpg

    La vue de gauche est une TreeView qui permet de choisir differentes options

    La vue de droite est une vue openGL

    J' ai besoin d' avoir acces au clavier et a la souris dans ma vue openGL , car les fleches du curseur et la souris permettent de deplacer les modeles 3d .

    J' ai donc des fonctions Onchar et OnMouseMove dans la classe de ma vue openGL

    pour la souris , aucun probleme des que la souris est sur la vue openGL , la modele tourne en reponse aux mouvements de souris

    Pour le clavier , pas moyen , on dirait que la fenetre n' a pas le focus et les touches sont ignor�es ( OnChar pas appel�e )

    J' ai donc bidoul� un SetFocus() dans la fonction OnLButtonDown de ma vue openGL ,

    Ca marche ( vu que j' ai le controle sur la souris sans probleme )mais ca me cr� un autre probleme : quand j' essaye de redimensonner le splitter parfois ca plante ( exception sur l' adresse 0x00000001)


    Je pense que tous ca vient d' un probleme de Splitter et de Focus , comment faire pour avoir un systeme propre qui dispatche le focus entre les splitters ? :

  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,
    j'utilise aussi des splitters , j'ai pas de pb ,
    pour ton pb sur l'erreur remonte quand la pile d'execution en debug (si c'est possible) .
    �a resemble bien � un pointeur pourri quand meme.

  3. #3
    Membre �clair� Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Par d�faut
    effectivement je pense aussi que c est a cause d ' un pointeur pourri


    mais lequel ??

    dans ma CMainFrame j' ai bien des pointeurs valide sur ma View openGL et ma tree view

    et c sur que le bug est li� au SetFocus() car sans lui tout va bien (mais je ne peux plus deplacer mes meshes au clavier ...)

    De plus ca ne se produit que dans un cas pr�cis : uniquement au lancement du prog quand on clique une fois sur la fenetre openGL ( un appel a SetFocus ) et qu' on essaye de redimensionner le splitter

    Jamais dans les autres cas ..

  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
    Par d�faut
    attention a l'init du programme et que le pointeur evenutellement stocke le soit au bon moment a cause de la mise en place du splitter.

  5. #5
    Membre �clair� Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Par d�faut
    justement dans le constructeur de main frame je les initialise a nul et on moment de splitter je les recupere :


    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
     
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
     
     BOOL bCreateSpltr = m_wndSplitter.CreateStatic( this, 1, 2);
     
     m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTreeMenu), CSize(50,0),
          pContext);
     
     m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CChildView), CSize(0,0),
          pContext);
     
     m_pwndView  = (CChildView*)m_wndSplitter.GetPane(0,1);
     m_pTreeMenu = (CTreeMenu*)m_wndSplitter.GetPane(0,0);
     
     
     m_initSplitter = bCreateSpltr;
     
     return (bCreateSpltr);
     
    }

    est ce correct ?

  6. #6
    Membre �clair� Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Par d�faut
    bon ,

    j arrive a contourner le bug en rajoutant :

    m_wndSplitter.SetActivePane(0,0,m_pTreeMenu);

    dans le code de BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)


    ??

    je comprends pas trop pourquoi ca change qq chose mais il semble que ca fonctionne

  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
    j'ai regarde ce que je fais sur mes splitters ,
    je procede de la meme maniere que toi pour recuperer les pointeurs sur view.
    petit point de detail moi j'utilise:
    CFrameWnd::SetActiveView
    This method is automatically called by the framework to set the active view as the user changes the focus to a view within the frame window. You can explicitly call SetActiveView to change the focus to the specified view.

    void SetActiveView(
    CView* pViewNew,
    BOOL bNotify = TRUE);
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
            CView1 *pView1=(CView1 *)m_wndSplitter.GetPane(0,0);
    	CView2 *pView2=(CView2 *)m_wndSplitter.GetPane(1,0);
     
    	// activate the input view
    	SetActiveView(pView1);

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

Discussions similaires

  1. [MFC] - CSplitterWnd dynamique et split
    Par ivles dans le forum MFC
    R�ponses: 1
    Dernier message: 28/10/2007, 10h54
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    R�ponses: 8
    Dernier message: 08/06/2005, 15h57
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    R�ponses: 2
    Dernier message: 13/06/2002, 14h58
  4. R�ponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    R�ponses: 3
    Dernier message: 10/06/2002, 07h36

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