Technician Geschrieben 12. November 2002 Geschrieben 12. November 2002 Hallo, wie kann ich eigentlich auf Steuerelemente meines TabControls zugreifen? Beispiel: Ich hab ein TabControl mit zwei Tabs, jedes enthält zwei Edit-Felder. Die einzelnen Tabs sind dabei Dialogfenster. Wenn ich jetzt auf einen (nicht auf dem TabControl gelegenen!) Button klicke, soll eine Membervariable des ersten Tabs gesetzt werden und dementsprechend das Edit-Feld befüllt werden. Angezeigt wird mir das TabControl mit den enthaltenen Dialogfenstern bereits richtig. In void CMeinPRogrammView::OnButton1() greife ich mit TC_ITEM item; m_TabControl.GetItem(0, &item); auf das TabControl und hier auf den ersten Tab zu. Aber wie greife ich jetzt auf das Dialogfeld zu - da muss ich ja die Membervariable setzen...?! :confused: Grüße, Technician Zitieren
Klotzkopp Geschrieben 12. November 2002 Geschrieben 12. November 2002 Üblicherweise speichert man beim Hinzufügen einen Zeiger auf die Instanz der Dialogklasse im lParam der TCITEM-Struktur. Zitieren
Technician Geschrieben 12. November 2002 Autor Geschrieben 12. November 2002 wenn ich das jetzt so schreibe, wird mein Dialogfenster gar nicht mehr im Tab angezeigt... :confused: void CMeinProgrammView::OnInitialUpdate() { CFormView::OnInitialUpdate(); ResizeParentToFit(); CTabOne* to = new CTabOne; TC_ITEM item; item.lParam = (LPARAM) to; item.pszText = _T("Tab #1"); m_TabControl.InsertItem(0, &item); } Please help Technician Zitieren
Klotzkopp Geschrieben 12. November 2002 Geschrieben 12. November 2002 Du musst die Maske der TCITEM-Struktur setzen, damit die Methode weiß, welche Teile der Struktur gültige Daten enthalten. item.mask = TCIF_TEXT | TCIF_PARAM; Zitieren
Technician Geschrieben 12. November 2002 Autor Geschrieben 12. November 2002 Originally posted by Klotzkopp Du musst die Maske der TCITEM-Struktur setzen, damit die Methode weiß, welche Teile der Struktur gültige Daten enthalten. item.mask = TCIF_TEXT | TCIF_PARAM; ... der Titel-Text des Tabs wird angezeigt - der Steuerelemente-Dialog des Tabs nicht Zitieren
Klotzkopp Geschrieben 12. November 2002 Geschrieben 12. November 2002 Originally posted by Technician ... der Titel-Text des Tabs wird angezeigt - der Steuerelemente-Dialog des Tabs nicht Seltsam. Hast Du noch was anderes geändert? Wie hast Du die Tabs vorher hinzugefügt? Zitieren
Technician Geschrieben 12. November 2002 Autor Geschrieben 12. November 2002 Originally posted by Klotzkopp Seltsam. Hast Du noch was anderes geändert? Wie hast Du die Tabs vorher hinzugefügt? ... vorher war das mit einer von CTabCtrl abgeleiteten CMyTabCtrl gelöst - allerdings nicht von mir programmiert, sondern aus nem "Übungsbeispiele-Fundus". class CMyTabCtrl : public CTabCtrl { // Construction public: CMyTabCtrl(); CDialog *m_tabPages[3]; int m_tabCurrent; int m_nNumb public: CMyTabCtrl(); CDialog *m_tabPages[3]; ... CMyTabCtrl::CMyTabCtrl() { m_tabPages[0]=new CTabOne; m_tabPages[1]=new CTabTwo; m_tabPages[2]=new CTabThree; m_nNumberOfPages=3; } CMyTabCtrl::~CMyTabCtrl() { for(int nCount=0; nCount < m_nNumberOfPages; nCount++){ delete m_tabPages[nCount]; } } void CMyTabCtrl::Init() { m_tabCurrent=0; m_tabPages[0]->Create(IDD_TAB_ONE, this); m_tabPages[1]->Create(IDD_TAB_TWO, this); m_tabPages[2]->Create(IDD_TAB_THREE, this); m_tabPages[0]->ShowWindow(SW_SHOW); m_tabPages[1]->ShowWindow(SW_HIDE); m_tabPages[2]->ShowWindow(SW_HIDE); } ganz normal das TabControl auf die View gemalt; View hat Attribut CTabCtrl m_TabControl das zum TabControl gehört; TabOne ist ein Dialogfenster... Aaaber, mir ist jetzt grad was aufgefallen, was mir seeeehr spanisch vorkommt: in OnInitialUpdate, also da wo ich das TabControl "füllen" will, zeigt mir der Debugger für die Zeile CTabOne* pTo = new CTabOne; das hier an: pTo 0x013420a0 CDialog hWnd 0x00000000; kommt mir komisch vor :eek: im Header der View-Klasse steht CTabOne* pTo; und im Konstruktur steht pTo = new CTabOne(); müsste doch normalerweise korrekt sein, oder?! Zitieren
Klotzkopp Geschrieben 12. November 2002 Geschrieben 12. November 2002 Originally posted by Technician pTo 0x013420a0 CDialog hWnd 0x00000000; kommt mir komisch vor :eek: Das ist normal. Eine Fensterklasse hat erst nach dem Create ein gültiges Handle. Aber wenn Du jetzt diese abgeleitete Klasse nicht mehr benutzt, ist auch klar, warum die Dialog nicht mehr angezeigt werden: Ein gewöhnliches CTabCtrl besteht nur aus den Tabs selbst. Um die Darstellung der Dialoge musst Du Dich selbst kümmern. Wahrscheinlich hat das diese Klasse aber für Dich gemacht. Zitieren
Technician Geschrieben 13. November 2002 Autor Geschrieben 13. November 2002 Originally posted by Klotzkopp Ein gewöhnliches CTabCtrl besteht nur aus den Tabs selbst. Um die Darstellung der Dialoge musst Du Dich selbst kümmern. Wahrscheinlich hat das diese Klasse aber für Dich gemacht. Aha *erstaunt-bin* Da wär ich nie und nimmer drauf gekommen. Um ein TreeControl verwenden zu können, muss man ja auch nicht eine Klasse davon ableiten. Danke! Technician Zitieren
Technician Geschrieben 13. November 2002 Autor Geschrieben 13. November 2002 ... ich brauch diese abgeleitete Klasse gar nicht... für diejenigen, die's interessiert wie das mit dem TabControl funktioniert - hier http://docs.rinet.ru:8083/SeeDDB/vcg11.htm#E69E186 hab ich die Lösung gefunden... Grüße, Technician Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.