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_Infosin
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.