[MFC] Accesare variabila membra CFormView din CMainFrame

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
Post Reply
ovidiu91
Junior
Junior
Posts: 4
Joined: 06 Feb 2011, 17:05

[MFC] Accesare variabila membra CFormView din CMainFrame

Post by ovidiu91 » 03 May 2011, 16:26

Am creat o aplicatie MFC SDI in care am un ribbon (office 2007 style), ce contine butoane, definite in clasa CMainFrame (MainFrm.cpp) si un dialog, ce contine o lista (Listbox Control), definita in CFormView( i-am asociat o variabila "listaContacte").
Problema mea este urmatoarea: doresc sa accesez variabila definita pentru lista din clasa CFormView( "listaContacte") in functiile butoanelor, dar nu reusesc. In primul rand, headerul clasei CFormView nu este inclus in MainFrm.cpp si orice tentativa de a-l include rezulta in erori inexistente ( de exemplu: nu recunoaste un tip de date din clasa CFormView sau cere prezenta unui ';' dupa 'public:', tot din clasa CFormView).



mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: [MFC] Accesare variabila membra CFormView din CMainFrame

Post by mesajflaviu » 03 May 2011, 21:49

Daca vrei sa obtii un pointer la CMyFormView din CMainFrame :

Code: Select all

CMyFormView* pForm = (CMyFormView*)GetActiveView();
if(pForm)pForm->DoSomething();
Iar daca vrei sa obtii un pointer la CMainFrame din CMyFormView :

Code: Select all

CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
if(pFrame)pFrame->DoSomething();
... daca in CMyFormView.cpp incluzi #include "MainFrm.h" nu ar trebui sa ai eroare ...
Last edited by mesajflaviu on 05 May 2011, 09:29, edited 1 time in total.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: [MFC] Accesare variabila membra CFormView din CMainFrame

Post by Ovidiu Cucu » 04 May 2011, 10:47

Problema apare din cauza unui include circular.
Simplificat, ceva de genul:

Code: Select all

// Foo.h
#pragma once
#include "Bar.h" 
class CFoo  
{
   //...
};

Code: Select all

// Bar.h
#pragma once
#include "Foo.h" 
class CBar  
{
public:
   CFoo m_foo; // compiler error because of circular include
};
De obicei se rezolva cu un forward declaration.

Code: Select all

// Bar.h
#pragma once
class CFoo; // forward declaration 
class CBar  
{
public:
   CFoo* m_pFoo; // OK.
};

ovidiu91
Junior
Junior
Posts: 4
Joined: 06 Feb 2011, 17:05

Re: [MFC] Accesare variabila membra CFormView din CMainFrame

Post by ovidiu91 » 04 May 2011, 21:55

Pointer-ul la CFormView merge brici. Multumesc pentru solutie si pentru explicatie! :)

Post Reply