TabControl erzeugen
-
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
-
phlox81 schrieb:
Es geht auch ohne CPropertysheet.
Schau dir mal meine Klasse DynTabCtrl
an, du musst dann einfach nur die Dialoge erstellen, und statt CTabCtrl
DynTabCtrl nehmen, und per Insert(CDialog*,CString titel, UINT ID) einfügen.Devil
Hi phlox81,
das habe ich versucht, doch leider meldet er mir unverständlicher Weise beim Kompelieren immer folgenden Fehler:
...\DynTabCtrl.cpp(121): error C2039: 'find' : Ist kein Element von 'std'
Ich bin wie folgt vorgegangen:
1. DynTabCtrl.cpp + DynTabCtrl.h in mein Projekt eingefügt
2. DynTabCtrl.h in den Header des Hauptdialoges eingefügt
3. Member-Var gesetzt im Hauptdialog-Header: DynTabCtrl mCtrl_Tab_Suche;Und danach zum Testen kompeliert.
Woran kann das liegen?
Danke für Deine Hilfe!
Gruß,
Elayas
-
Hat keiner eine Antwort auf die Frage von F98? Ich hab nämlich das gleiche Problem.
-
Habs doch slber gefunden. Bei mir fehlte DDX_Control(pDX, IDC_TABCONTROL, m_TabControl); in DoDataExchange.
-
Auch ich habe den Fehler bekommen
error C2039: 'find': Ist kein Element von 'std'
Es lies sich aber nicht abstellen durch die Änderung von Tyrdal. Hab ich irgendwo vergessen was einzutragen?
Viele Grüße und dank im Voraus,
Ranger
-
find müsste in <algorithm> definiert sein. Einfach als Header einbinden.
-
Hallo phlox81,
Ich danke Dir. Jetzt kommen nur noch Warnungen wegen Typumwandlungen, aber die könnte man mit einem cast umgehen oder "abschalten".
Nochmals vielen Dank
Ranger
-
Hallo,
habe auch mit der Methode von Phlox ein TabControl erzeug, nur passiert nun beim Ausführen iommer folgender Fehler:
Das Programm startet ganz normal und an der Stelle, als es in den Dialog mit der TabCtrl springt, kommt folgende Meldung:
Create von "Identify"(der Name des Dialogs, der im Tab angezeigt werden soll)
fehlgeschlagen.
Das passiert dann bei allen Tabs.Kann mir da jemand weiterhelfen???
-
Hm, is ne weile her das ich die Klasse selber benutzt hab,
aber kanns sein das deine Dialoge den falschen Rahmen etc. haben?
Sie müssen Randlos sein, und sonst auch noch irgendwelche Einstellungen haben,
kann mich aber nicht genau daran erinnern.In wxWidgets ist das alles schon eingebaut
-
Was ist wxWidgets??
Sagt mir nichts.Die Dialoge sind randlos, ohne Menü, Untergeordnet usw. eigentlich ist alles ausgeschalten.
-
Benn85 schrieb:
Was ist wxWidgets??
Sagt mir nichts.Die Dialoge sind randlos, ohne Menü, Untergeordnet usw. eigentlich ist alles ausgeschalten.
Eine (bessere
) Alternative zur MFC. Ist auch Plattformunabhängig, benutzt aber native Steuerelemente.
Im Magazin hab ich schon zwei Artikel dazu geschrieben.
-
Hätte da noch eine Frage. Also bei mir sehen die Tabs bzw Fensterrand ziemlich bescheiden aus.
In der Dialogdemo siehts so aus:
http://img3.imagebanana.com/img/cq6onglb/DEMO1.jpg
Unter den Tabs eine dunkle Trennlinie und der Inhalt etwas heller.
Bei mir siehts so aus:
http://img3.imagebanana.com/img/tdj292di/DEMO2.jpg
Beim ersten Tab sieht man noch einen ansatz von dem schwarzen rand oben. Das ist aber nicht so schlimm, was mich eher stört ist das innere. Sprich der nach innen "gepresste" rand.
Wie kann man das so wie in der Demo bekommen?
-
Jetzt greife ich den Thread nochmals auf, da ich die Klasse auch gerade verwenden wollte.
Allerdings hat die Klasse Fehler zu genüge. Einige wurden ja schon im Thread teilweise beantwortet. Manche auch nicht.
Wann rufe ich z.B. InsertItem auf. Wenn ich es im Konstruktor aufrufe der Klasse die das Objekt von DynTabCtrl enthält liefert die Funktion einen Fehler. Grund: this wird beim Create als parent übergeben. this besteht aber zu dem Zeitpunkt noch nicht. Wenn ich es in InitDialog aufrufe, wird InsertItem ja jedes Mal aufgerufen wenn ich den Dialog anzeige. Der Dialog wird zwar nicht nochmals neu angelegt aber zur Liste neu hinzugefügt.
Im Destruktor wird, DestroyWindow() aufgerufen. Allerdings bestehen zu dem Zeitpunkt die Dialoge nicht mehr.
-
InitDialog wird doch nur einmal beim erzeugen deine Dialoges Aufgerufen, warum kannst du da die Inserts nicht machen, dafür ist doch die Funktion da um deinen Dialog zu initialisieren.
-
Es ist ein Unterdialog einer Applikation. Und OnInitDialog wird nun jedes mal aufgerufen wenn ich den Dialog über .DoModal aufrufe.