TabControl erzeugen
-
aCCa schrieb:
Da ist mir gerade noch was aufgefallen:
Wenn man mit den Pfeiltasten die Tabs auswählt, wechselt der Dialog nicht...
Würde mich auch interessieren wie man den Dialog-Wechsel durch die Pfeiltasten realisiert
-
normal sollte sowas mit [strg]+[tab] gehen.. zumindest bei den normalen CTabCtrl... aber sowas sollte man wissen.... depp
-
(D)Evil schrieb:
normal sollte sowas mit [strg]+[tab] gehen.. zumindest bei den normalen CTabCtrl... aber sowas sollte man wissen.... depp
das checkt johnny nicht so ganz. was meinst du mit [strg]+[tab]? es geht darum die funktionalität hinzuzufügen, dass mit den pfeiltasten zwischen den tabs gwechselt werden kann in (innerhalb des CTabCtrl)!
-
aCCa schrieb:
Da ist mir gerade noch was aufgefallen:
Wenn man mit den Pfeiltasten die Tabs auswählt, wechselt der Dialog nicht...
Weiß jemand wie das geht?
-
Hi
Ich habe DynTabCtrl in eine SDI -anwendung mit Formview ansicht
gepackt . Wenn ich diese anwendung schliesse kommen immer die Meldungen:Freigeben des Tabsheets fehlgeschlagen
für jedes Tab.
Wie kann ich diese Tabs freigeben bevor das Fenster geschlossen wird ?
Danke für die Hilfe
-
phlox81 schrieb:
1. TabCtrl auf dialog setzen.
2. Klasse DynTabCtrl in Projekt einbinden.
3. Membervariable auf TabCtrl erstellen (entweder direkt DynTabCtrl, oder CTabCtrl und danach im Header mit DynTabCtrl ersetzen)
4. Mach dir ein paar dialog, welche in den eigenschaften Untergeordnet und randlos sind.
5. Die Dialogklassen von CDialog ableiten
6. Den Header der Tab-Dialoge in die Datei des Hauptdialog einbinden(Da wo die TabCtrl ist).
7. m_dynTabCtrl.InsertItem(new myDialog(), "Lustiger Titel", IDD_DIALOG1) aufrufen,
um eine Tab hinzuzufügen.Bin auch gerade dabei, einen TabControl zu erstellen. Aber ich verstehe Punkt 4 und 5 nicht ganz: Wo erstelle ich einen neuen Dialog? Ausserhalb oder innerhalb meines Projektes? Ich bin eben einfach in der Resource Ansicht / "Dialog" auf "Insert Dialog" gegangen und habe nun ein neues IDD_DIALOG1, welches nun auch randlos und untergeordnet ist. Aber da gibts keine Header-Datei zu und wo muss ich da etwas ableiten? Wenn mir jemand Punkt 4 und 5 näher erläutern könnte, wäre ich sehr dankbar
-
Innerhalb des Projektes musst du den neuen Dialog machen, hast du also schon richtig gemacht.
Und dann tust du das, was du sonst auch machst und erstellst eine Klasse für den Dialog.
Die soll von CDialog abgeleitet sein, das ist sie aber fast automatisch, da musst du nur im Assistenten gucken, dass er das richtige macht.
-
estartu schrieb:
Und dann tust du das, was du sonst auch machst und erstellst eine Klasse für den Dialog.
Genau da verlassen sie mich ja schon, weil ich noch Neuling bin
Es verwirrt mich ja schon, dass in der Datei "myApplicationDlg.cpp" die Klasse CAboutDlg deklariert wird, obwohl doch der Haupt-Dialog die Hauptsache hier ist und nicht diese "Randerscheinung" der About-Box.
Wie lege ich denn eine neue Klasse an? Datei/Neu/Quelldatei und dann das ganze nochmal für die Header-Datei? Was muss dann darein? Gibts einen Assistenten der das übernimmt?
-
VC6? oder höher?
-
VC6++ (der Prof will es so
)... aber warte eben, ich glaube ich habs gleich. Mr ist aufgefallen, dass der Hauptdialog in der Header-Datei als Klasse definiert ist und der optionale About-Dialog in der cpp-Datei. Ergo habe ich auch mal den neuen Dialog direkt dadrunter als Klasse eingetragen und er scheint es zu akzeptieren (ist sicher unschön zwei Klassen in einer cpp-Datei zu deklarieren oder?).
Im Moment habe ich wohl die Verbindung zu DynTabCtrl nicht richtig, denn er erwartet bei InsertItem() immernoch einen int statt einer Klasse. Das finde ich sicher noch raus wieso.
-
Also, für VC6 wäre Schritt 5 ganz einfach:
Die Ressource angucken.
Strg+W drücken (Klassenassistent öffnen)
Dialoge beantworten
Fertig... du hättest eine neue Klasse in einem eigenen H+cpp Dateipärchen.Also falls dein Weg nicht klappt, versuch es so mal.
-
Hmmmm prinzipiell funktionierts, aber nur mit dem Standard CTabControl, und da sehe nur meine 3 Tabs, aber keine Spur von den Inhalten. DynTabCtrl bekomme ich nicht eingebunden. Ich kann im Header zwar aus "CTabCtrl m_TabCtrl" ein "DynTabCtrl m_TabCtrl" machen, aber dann bekomme ich beim Linking einige unresolved symbols... die DynTabCtrl.h ist aber oben im Kopf included.
-
Hast du die beiden Dateien zu DynTabCtrl auch dem Projekt hinzugefügt?
unresolved symbols heißt, dass was im Cpp fehlt - oder eben das ganze Cpp oder eine lib.
-
Ahhh
Hatte es nur included... jetzt klappts, danke für Deine Hilfe!
-
So, nun hänge ich wieder fest: Ich möchte eine Bitmap auf einen Tab zeichnen. Ich habe das Bitmap bereits created und mit einer Farbe gefüllt und ich muss es nur noch zeichnen (ich benutze eine Bitmap.dll von der Uni):
myBitmap.EnableDisplay(&myDialog1(),0,0,200,30);
myDialog1 ist mein Tab Nr.1, er akzeptiert es, aber ich sehe nichts. Ersetze ich das Tab durch "this" dann sehe ich die Bitmap auf meinem Hauptdialog. Das "&myDialog1" stimmt also nicht, was muss dahin?
EDIT: Ich schreibe immer zu schnell ins Forum, sorry
GetTab() war die Lösung...
-
Wieder etwas zu diesem Thema: Diesmal versuche ich ein RichEdit-Control auf ein Tab zu legen. Wenn ich das Programm dann aber starten will, bricht er mit der Fehlermeldung ab, dass Tab XY nicht created werden könne. Entferne ich das RichtEdit wieder, klappt es wieder. Wieso?
-
Akutes Problem:
Ich habe die Klasse in mein Projekt eingebunden und habe nach Anleitung Objekte erzeugt. Nun ist es so, dass beim Einfügen des 1. Dialog-Tabs im Konstruktor des Haupdialoges (dort, wo das DynTabCtrl drin ist) der entspr. Unterdialog nicht erzeugt wird:
XNAPConfDlgMain::XNAPConfDlgMain(CWnd* pParent, void *pParams, int iParamSize) : CDialog(XNAPConfilDlgMain::IDD, pParent) { m_tctrlDynConfigMain.InsertItem(new ConfigDialog(), "Parameter", IDD_CONFIGDIALOG); }
Das Erzeugen des Tabs bricht in DynTabCtrl::InserItem() ab:
int DynTabCtrl::InsertItem(CDialog * dlg, CString titel, UINT ID) { if(!dlg->Create(ID,this)) { MessageBox("Create von " + titel +" fehlgeschlagen"); delete dlg; dlg =NULL; return FALSE; } ... }
dlg->Create() ist nicht erfolgreich. Warum?
-
Hallo,
ups, sorry, fehler!pixel
-
Könnte trotz des luschigen Zwischenrufes, bitte jemand qualifiziert auf meine Frage 15cm weiter oben antworten?
-
Hi,
ich wollte selber etwas fragen aber da dachte ich der thread ist zu alt und keiner würde antworten, ich möchte die tabs mit unterschiedlichen text-farben beschriften,
k.a. wie das gehen soll, wo ist dein problem, ich benutze auch das selbe ohne probleme, welche fehlermeldung hast du?.InsertItem(new DeinNewDlg(), L"Überschrift für Tab", IDD_DEIN_NEW_DIALOG);
so sollte es doch gehen???
ah ja, und ich benutze CDialog...grüsse
pixel