Regestrierkarten
-
Ich habe jetzt mit m_cTab.InsertItem(); die Karten erstellt.
Aber wie bringe ich meine Buttons auf die einzelnen Registerkarten???????????
-
Hi!
Mit AddPage fügst du die einzelnen Registrierkarten (Dialoge) hinzu. Die Beschriftung der Dialoge ist natürlich der Dialogtitel. CPropertyPage ist die eigentliche Registrierkartenklasse (gleich wie z.B. CDialog). Du kannst sie gleich wie ein Dialog Modal oder auch nicht Modal aufrufen bzw. erzeugen. Die PropertySheet kannst du gleich wie eine Dialogklasse behandeln. D.h. du hast OnInitialDialog() usw.. Das Abfragen der Daten erfolgt ebenfalls gleich.*mike*
-
Uhhhhh
Da war ich wieder um 1 Minute zu langsam.....
Mit AddPage werden die Buttons automatisch eingefügt.
Weiß gar nicht, was InsertItem() macht*mike*
-
Mir ist ein kleiner Fehler unterlaufen:
Ich will nicht Regestrierkarten sonder Registerkarten erstellen.
Sorry.
Kann mir jemand sagen wie ich hier die Buttons auf die einzelnen Karten kriege.
-
Schau Mal auf [url] http://www.fun-soft.de/ [/url] unter (VC++/MFC)->Registerkarten nach fand ich gut beschrieben
-
Hi!
Ich bins nochmal. Was genau willst du haben???? CTabCtrl o. Registerkarten!? Was ist da der Unterschied??
Ich kapier nichts mehr.....*mike*
-
also wenn dass nichts für die FAQ ist dann brauchen wir keine
-
Mmmmm
Ein Thema für die FAQ?????
Wir haben (anscheinend) ja noch immer keine wirkliche Lösung gefunden.
Also mit dem FAQ Eintrag würde ich noch einwenig warten ...*mike*
-
Ich will Registerkarten und habe die Lösung auf www.fun-soft.de unter VC++/MFC gefunden. Ist eine echt gute Erklärung. Falls es jemand interesiert kann ich die Erklärung posten.
[ Dieser Beitrag wurde am 28.06.2002 um 13:53 Uhr von Fink Christoph editiert. ]
-
Original erstellt von Fink Christoph:
**Ich will Registerkarten und habe die Lösung auf www.fun-soft.de unter VC++/MFC gefunden. Ist eine echt gute Erklärung. Falls es jemand interesiert kann ich die Erklärung posten.[ Dieser Beitrag wurde am 28.06.2002 um 13:53 Uhr von [qb]Fink Christoph** editiert. ][/QB]
würde auch reichen wenn du einfach den Link angibst...;)
Ich bin mal so frei...
http://www.fun-soft.de/html/vc.html#regis
-
Ach ja, werd es mal in die FAQs packen....
-
Ich muss sagen, diese Klasse hat mir auch sehr gut gefallen :
Take this
-
Original erstellt von *mike*:
**Hi!
Erstell einfach Dialoge mit Klasse (von CPropertySheet geerbt). Dann erstell eine Klasse (von CPropertyPage geerbt).
Die PropertyPage Klasse kannst dann ziemlich einfach nutzen:
CTabPage pTab;
CFirstSheet pFirst;
CSecondSheet pSecond;
pTab.AddPage(&pFirst);
pTab.AddPage(&pSecond);
pTab.DoModal();*mike* :)**
Hi - Ich war auf der Suche nach einer Lösung auf das gleiche Problem, und bin auf den Artikel gestossen.
Kann es sein dass Du (Mike) das Sheet und Page durcheinander gebracht hast? pTab muss abgeleitet von CPropertySheet sein pFirst bzw. pSecond abgeleitet von CPropertyPage. AddPage ist ja auch nur in der Sheet Klasse verfügbar.
Das sollte man vielleicht auch in den FAQ ändern, wo ich diesen Artikel zuerst gefunden habe.So ich mache mich jetzt mal daran zu sehen ob das klappt mit den verschiedenen Pages.
Falls es jemanden interessiert, bisher hatte ich folgende Lösung: In einem Dialog alle Inhalte der verschiedenen Registerkarten übereinanderlegen (Das Tabcontrol als letztes hinzufuegen bzw. Taborder im Dialogeditor so ändern dass es das letzte ist, sonst verdeckt es die Controls)Da mein Basisview CFormView ist habe ich in OnInitialUpdate():
// Tab Control TCITEM tcItem; const int contentdef = 2; PSTR pszTabItems[contentdef] = { "Registerkarte 1", "Registerkarte 2", NULL }; for (int i = 0; pszTabItems != NULL; i++) { tcItem.mask = TCIF_TEXT; tcItem.pszText = pszTabItems[i]; tcItem.cchTextMax = strlen(pszTabItems[i]); this->m_Berechnung.InsertItem(i, &tcItem); }
Im Classwizard ist eine Variable auf das Tabcontrol definiert (m_cBerechnung), und eine Messengerfunktion, so dass selection changes zu aktivierung bzw deaktivierung führen. Auf jedes Controlobjekt ist auch eine Variable definiert, als Controlobjekt! Also fuer z.B editfelder nicht per Classwizard eine Variable vom Typ CString hinzufuegen, sondern den Typ auf Control ändern. Alle statischen Textfelder / Beschriftungen muessen per Dialogeditor-Properties von IDC_STATIC auf was anderes umbenannt werden, zB IDC_STATIC_1, sonst kann man keine ControlVariable darauf legen
///////////////////////////////////////////////////////////////////////////// // CSchneckeView message handlers void CSchneckeView::OnSelchangeTabBerechnung(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here m_cD.ShowWindow(m_cBerechnung.GetCurSel() == 0 ? SW_SHOW: SW_HIDE); m_cIm.ShowWindow(m_cBerechnung.GetCurSel() == 1 ? SW_SHOW: SW_HIDE); *pResult = 0; }
Das fuehrt zur Aktivierung von m_cD bei Tab1 und m_cIm bei Tab2. Es ist allerdings eine megaumständliche Art und Weise, und da wie gesagt im Dialogeditor alle Felder übereinander in einem Dialog liegen wird es bei groesseren Registerfeldern absolut unübersichtlich.
Mal sehen wie das mit den Propertypages funktioniert...Gruss
Stefan
-
kleiner bug, so gehts:
TCITEM tcItem; PSTR pszTabItems[] = { "Horizontal DIN 15260", "Vertikal", NULL }; for (int i = 0; pszTabItems[i] != NULL; i++)
Die Methode mit dme Sheet und Pages funktioniert auch, allerdings muss man evtl. bei der generierten Sheet Klasse den Constructor mit dem Parameterstring UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0 rausnehmen, um dann mit
LPCTSTR x = "Fenstername"; CDialogTab pTab(x, NULL, 0); CDialog1 pFirst; CDialog2 pSecond; pTab.AddPage(&pFirst); pTab.AddPage(&pSecond); pTab.DoModal();
das Registerfenster erscheinen zu lassen
Gruss
Stefan