CStatic aus Klasse bedienen
-
Hihi,
ich habe ein kleines Problemchen und hoffe ich kann euch das auch irgendwie erklären.
Bisher habe ich eine Dialogfeldanwendung, die ein CStatic namens m_Output enthält. Über diese Membervariable habe ich dann Text in das Feld geschrieben. Nun war bisher die Funktion, die den Text an m_Output übergibt in der gleichen Klasse wie die CStatic (*dlg.h und *dlg.cpp)
Nun habe ich die Funktion in eine andere Klasse exportiert und möchte weiterhin in das Feld schreiben. Wie kann ich auf das CStatic Feld zugreifen. Bisher war der Funktionsaufruf m_Output.SetWindowsText(out). Die Definition der Membervariable hat den Zugriffsspezifizierer public.Kann man das Verstehen?
Kann mir jemand weiterhelfen?Liebe Grüße
Andrea
-
Du musst irgendwie schauen, dass deine andere Klasse einen Zeiger auf deine Dialogklasse bekommst. Über diesen Zeiger kannst du dann eine Funktion aufrufen, welche den Text setzt.
Hmmm vielleicht mal ein kleiner Beispielcode:
////////////////////////////////////////// // dlg.h class CDeinDialog : public CDialog { // ... private: CStatic m_Output; // ... public: void SetOutputText(CString strOutput) { m_Output.SetWindowText(strOutput); }; // ... } ////////////////////////////////////////// // DeineKlasse.h class CDeinDialog; class CDeineKlasse { // ... private: CDeinDialog* m_pDlg; // ... public: void SetDeinDialog(CDeinDialog* pDlg) { m_pDlg = pDlg; }; void EineFunktion(); // ... } ////////////////////////////////////////// // DeineKlasse.cpp #include "DeinDialog.h" CDeineKlasse::CDeineKlasse() : m_pDlg(NULL) { } // ... void CDeineKlasse::EineFunktion() { // Irgendwelche Berechnungen oder was auch immer if(m_pDlg != NULL) { m_pDlg->SetOutputText(strText); } // Womöglich noch mehr } // ...Grüssli
-
Hab mal in die richtung experimentiert. Allerdings kein erfolg. werde mich später noch mal mit der problematik beschäftigen. danke für die antwort.
liebe grüße
andrea
-
andrea19791 schrieb:
Hab mal in die richtung experimentiert. Allerdings kein erfolg. werde mich später noch mal mit der problematik beschäftigen. danke für die antwort.
liebe grüße
andrea
Sag doch wo du keinen Erfolg hattest, bzw. wo du Probleme hattest. Dann könnte man dir ja dabei auch helfen

Grüssli
-
Hmm... wenn wir einmal davon ausgehen, das dein Dialog, der Hauptdialog deiner Anwendung ist, dann wäre eine saubere Lösung so:
// MyDialog.h // ... class CMyDialog : public CDialog // ... { // ... protected: CStatic m_wndMyStaticCtrl; // ... public: CStatic* GetMyStaticCtrl(void) { return &m_wndMyStaticCtrl; } // .... }// MyOtherClass.h #include ".\mydialog.h" // ...// MyOtherClass.cpp // ... Wenn es unser Hauptdialog ist geht folgendes: CStatic* pwndMyStaticCtrl = ((CDialog*)(AfxGetMainWnd())->GetMyStaticCtrl(); pwndMyStaticCtrl->SetWindowText(_T("Test")); // ... An sonnsten gehts nur noch bei einem nicht modal erstellten Dialog. Da // du zum erstellen des Dialoges (mit Create), ein CDialog Objekt angelegt // hast, kannst du nun einfach mit folgendem das von dir gewünschte machen: wndMyDialogObject.GetMyStaticCtrl()->SetWindowText(_T("Test"));Ich hoffe das hat dir geholfen
