Zugriff auf CFormView



  • Ich hab mal wieder null plan wie ich das machen soll.
    Hab immer zuviele Ideen die ich dann nich umsetzen kann weil mir das Wissen fehlt, deswegen schreib ich hier mal wieder ins Forum.

    Wie das Thema schon sagt moechte ich auf meine Klasse CFormView zugreifen.
    Ich habe diese als Basisklasse meiner SDI Anwendung gewaehlt.
    Nun will ich zusaetzlich ueber das Menu auf einen Dialog zugreifen, das klappt soweit auch ganz gut.
    Nur jetzt kommt der Haken, ich moechte in diesem Dialog (Klasse CDialog) auf Daten (public Variablen) der Klasse CFormView zugreifen (Der Anwender gibt im CFormView Daten in Editfelder ein, diese werden im Dialogfenster ausgewertet).

    Ich habe bereits mit hilfe des Klassenassistenten eine Fremdvariable erzeugt (diese ist ein Pointer auf die Klasse CFormView), jetzt koennt ich ja theoretischer weise auf Methoden und Variablen der Klasse CF. zugreifen, wenn ich
    "Fremdvariable->....." mache.
    C++ zeigt mir in diesem falle auch alle Methoden etc. an.
    Wenn ich dies aber verwende stuerzt er mir ab.
    Muss ich vorher ueberpruefen ob der Zeiger gueltig sind ???? Wenn ja wie?
    Habs schon mit "GetSaveHwnd()" probiert, klappt aber nich.

    Can anybody help me???



  • Initialisiere den Zeiger im Konstruktor des Dialoges mit NULL. Dann kannst du vor der Verwendung prüfen, ob der nicht NULL ist und nur dann verweden.
    Das geht mit:

    ASSERT(pView);
    if(pView)
    {
    // tu was
    }
    

    Diesen Zeiger musst du von außen aber noch füllen. Von alleine weiß der Dialog nicht die Adresse des Views. Das musst du dort rausfinden und festlegen, wo du den Dialog aufrufst.

    Zeig ein wenig Code, wenn du es nicht schaffst, dann kann man dir besser helfen. 🙂



  • Jo, erst ma danke fuer die schnelle Antwort.
    Hier mein Aufruf in der Klasse CFormView:

    void CTempcon_ParametrierungView::OnParametrierungConfigurate() 
    {
    	CConfiguration * Dialog = new CConfiguration;
    	Dialog->DoModal();
    }
    

    Dann in der Klasse CDialog:

    if (Conf->???????)                      // Conf ist die Fremdvariable
    	{
    		CWnd * pWnd_channel = NULL;
    
    		for(int i=0; i<6; i++)          //hier werden nur Checkboxen                                
                                                    //ausgewertet
    		{
    			pWnd_channel = (CButton*)GetDlgItem(channel[i]);
    
    			if(pWnd_channel->GetSafeHwnd())
    			{
    
    				if ( ((CButton*)GetDlgItem(channel[i]))->GetCheck() == 1)
    				{
    
    						U_bit_byte3 Configuration;
    						U_bit_byte3 Daten;
                                                    //hier kommt dann schliesslich 
                                                    //der Aufruf der Membervariablen 
                                                    //der Klasse CFormView
                                                    //hab mir das etwa so gedacht
                                                    //Conf->Membervariable
    }
    

    Waer cool wenn du mir helfen koenntest.



  • Achso, wie setz ich den Zeiger den im Konstruktor auf NULL, wo??

    Hier die Header Datei:

    /////////////////////////////////////////////////////////////////////////////
    // Dialogfeld CConfiguration 
    
    class CConfiguration : public CDialog
    {
    // Konstruktion
    public:
    	CConfiguration(CWnd* pParent = NULL);   // Standardkonstruktor
    
    // Dialogfelddaten
    	//{{AFX_DATA(CConfiguration)
    	enum { IDD = IDD_DIALOG1 };
    	BOOL	m_check1;
    	CTempcon_ParametrierungView*	Conf ;
    	//}}AFX_DATA
    
    	int channel[5];
    
    // Überschreibungen
    	// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
    	//{{AFX_VIRTUAL(CConfiguration)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    

    Einen Teil hab ich weggelassen, zwecks der laenge.



  • Hmm, so ganz steige ich durch deinen Quellcode nicht durch, aber ich versuche es trotzdem mal.

    Ich hoffe der Zeiger soll auf den CTempcon_ParametrierungView zeigen und ist public, dann sieht das so aus:

    void CTempcon_ParametrierungView::OnParametrierungConfigurate() 
    {
        CConfiguration * Dialog = new CConfiguration;
        Dialog->Conf = this;
        Dialog->DoModal();
    }
    

    So sollte das gehen. 🙂



  • Hey, spitze. 😃 Haette nich gedacht das mir einer so schnell helfen kann.
    Konntest du mir vielleicht noch sagen was das "Dialog->Conf = this" bedeutet, ich kanns mir vorstellen, aber nich erklaeren, wenn du weisst was ich meine. 🙄



  • So, den einen Beitrag hatte ich übersehen:
    Der Konstruktor ist im cpp, nicht im header 🙄
    Das ist die Funktion CConfiguration::CConfiguration(CWnd* pParent)
    da schreibst du einfach

    Conf = NULL;
    

    rein.

    Was der this Zeiger ist, liest du am besten in einem Buch nach. Ich hab mir gemerkt, das ist ein Zeiger auf die aktuelle Klasse. 🙂

    Du bist in dem View, auf den gezeigt werden soll. Deswegen kannst du den this-Zeiger übergeben.



  • Alles klar.
    Nochmals danke.


Anmelden zum Antworten