Variablen bzw. objektzugriff



  • Hallo leute,

    ich habe folgende Frage:

    ich habe ein Tab erstellt und habe halt für jedes Tab eine eigene Klasse(CPageConnection,CPageSensor,CPageDisplay,CPageBasic). Nun möchte ich aber, dass wenn ich ein Objekt bzw. Variable für die Klasse CPageConnection erstellt habe in der .h-datei, dass ich auch zugriff aus der Klasse CPageSensor habe. Muss ich die Variable als "extern" deklarieren oder wie?



  • Solange du ein Objekt der jeweiligen Klasse hast, kannst du auch auf seine Member zugreifen - wo das angelegt wird, ist dann irrelevant 😉



  • wie kann ich dann auf das objekt zugreifen?mit welchen methoden?

    ich habe zum beispiel eine funktion

    GetLLT_Infos
    

    in

    CPageConnection
    

    . Dort habe ich eine Variable

    DWORD Laserpower
    

    .

    nun möchte ich aus meiner Klasse CPagesensor, wenn ich einen Wert(off,reduced,standard)aus meiner Combobox auswähle, dieser zuweisen. wie kann ich das machen? bitte mit codefragmenten, wenns geht.



  • Um den Wert zu bekomme, benötigst du nicht nur die Klassendefinition, sondern eine konkrete Instanz dieser Klasse.

    (das folgende geht davon aus, daß deine "Tabs" von CPropertyPage abgeleitet und in einem CPropertySheet zusammengefasst sind)

    CPropertySheet* parent = GetParent();//hole übergeordnetes PropertySheet
    CPageConnection* pcon = parent->GetPage(/*insert Index here*/);//hole richtiges Tab
    power = pcon->Lasepower;//Zugriff auf dessen Daten
    


  • also meine Tabs sind von CDialog aus abgeleitet. Spielt dies eine rolle oder kann ich mehr oder weniger wie bei CPropertyPage ableiten?

    und bei welcher meldung muß ich dann eigentlich den code einfügen, wenn ich eine combobox habe und dies nach auswählen aus der combobox zuweisen will?



  • PiotreD schrieb:

    also meine Tabs sind von CDialog aus abgeleitet. Spielt dies eine rolle oder kann ich mehr oder weniger wie bei CPropertyPage ableiten?

    Dann hast du vermutlich eine eigene Stelle, wo du deine Tabs untergebracht hast (Member des Hauptfensters o.ä.). Und über diesen Weg kannst du auch auf deren Membervariablen zugreifen.

    und bei welcher meldung muß ich dann eigentlich den code einfügen, wenn ich eine combobox habe und dies nach auswählen aus der combobox zuweisen will?

    Kurze Antwort: Dort, wo du's benötigst 😉 (wenn du etwas in der Combobox auswählst, bekommst du eine CBN_SELCHANGE, alternativ kannst du auch beim Wechsel des Tabs oder beim Klick auf die "Verarbeiten"-Schaltfläche (bevor du mit deinem Wert weiterarbeiten willst) die Daten zusammensuchen)



  • Also das mit dem CBN_SELCHANGE habe ich gefunden. wo kann ich s sehen, welche sache ich benutzen kann?

    habe, als ich mir die tabs erstellt habe, folgende sachen erstellt mit dem folgenden Code:

    #include "stdafx.h"
    #include "MyTabCtrl.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    /////////////////////////////////////////////////////////////////////////////
    // CMyTabCtrl
    //IMPLEMENT_DYNAMIC(CMyTabCtrl, CTabCtrl)
    CMyTabCtrl::CMyTabCtrl()
    {
    	m_iPrevPage = 0;
    }
    CMyTabCtrl::~CMyTabCtrl()
    {
    }
    BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl)
    	//{{AFX_MSG_MAP(CMyTabCtrl)
    //	ON_WM_LBUTTONDOWN()
    	//}}AFX_MSG_MAP
    	ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CMyTabCtrl::OnTcnSelchange)
    	ON_WM_SHOWWINDOW()
    END_MESSAGE_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // Behandlungsroutinen für Nachrichten CMyTabCtrl 
    void CMyTabCtrl::addNewPage(CString strPage, CWnd * pPage)
    {
    	this->InsertItem(this->GetItemCount(),strPage);  
    	pPage->ShowWindow(SW_HIDE); 
    	m_oPages.Add(pPage); 
    }
    void CMyTabCtrl::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    	//*pResult = 0;
    	CWnd * pPage;
    	int iCurrent;
    	iCurrent = this->GetCurFocus();
    	pPage = m_oPages.GetAt(iCurrent);
    	setPage(pPage);
    	m_iPrevPage = iCurrent;
    }
    
    void CMyTabCtrl::setPage(CWnd* pWnd)
    {
    	CWnd * pPage;
    	pPage = m_oPages.GetAt(m_iPrevPage);
    	pPage->ShowWindow(SW_HIDE); 
    	CRect oRect,oWRect,oPWRect,oIRect;
    	GetItemRect(0,oIRect); 
    	GetClientRect(oRect); 
    	GetWindowRect(oWRect);
    	GetParent()->GetWindowRect(oPWRect);   
    	pWnd->SetWindowPos(this,oWRect.left-oPWRect.left,oWRect.top-oPWRect.top,oRect.Width()- 10,oRect.Height()-oIRect.Height() - 50,SWP_SHOWWINDOW);   //.Width()- 10
    }
    void CMyTabCtrl::setDefaultPage(int iIndex)
    {
    	CWnd * pPage;
    	m_iPrevPage = iIndex;
    	if(iIndex >=0 && iIndex < m_oPages.GetCount())
    	{
    		pPage = m_oPages.GetAt(iIndex);
    		setPage(pPage);		
    	}
    }
    void CMyTabCtrl::OnShowWindow(BOOL bShow, UINT nStatus)
    {
    	CTabCtrl::OnShowWindow(bShow, nStatus);
    
    	// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein.
    }
    

    ist dies das, wo ich die sache irgendwie einbinden muss?



  • PiotreD schrieb:

    Also das mit dem CBN_SELCHANGE habe ich gefunden. wo kann ich s sehen, welche sache ich benutzen kann?

    Versuch's mal in der MSDN (oder im Klassenassistenten)

    habe, als ich mir die tabs erstellt habe, folgende sachen erstellt mit dem folgenden Code:

    ...
    

    ist dies das, wo ich die sache irgendwie einbinden muss?

    Das scheint dein Nachbau des PropertySheet's zu sein, richtig? Da kannst du über das Array m_oPages an die anderen Tabs herankommen (dazu mußt du dir nur merken, welchen Index der CPageConnection hat. Die Dialog-Nachrichten (wie z.B. die CBN_SELCHANGE-Behandlung) wird in der jeweiligen Dialogklasse erledigt.


Anmelden zum Antworten