Titelleiste dynamisch "beschriften"
-
Hm...Naja....Debug Assertion eben...
in der Winocc.dll
Beim Ersten...
Und hab die SetWindowText mit this-Variante in der OnInit, PreCreateWindow und OnCreate ausprobiert....kein Fehler, aber auch keine Änderung...
Werd wenn ich zu Hause bin noch mal in mein MFC Buch schaun...hab hier leider nurein c++ Kompendium, da steht nix drüber drin...
Aber danke....Bin trotzdem weiter offen für Vorschläge...
Dank euch....
P.S.: Wenn ich ne passable Lösung hab post ich die natürlich...
Ho Ho Ho
-
also ich hab die oben gepostete Lösung in einem eigenen Projekt getestet, und das funktioniert so.
Erstelle mal nen neuen Dialog in einem Projekt, mach nen Button drauf und in die BN_CLICKED diethis->SetWindowText( "neuer Titel" );rein. Wenn du ein UNICODE Project hast, dann:
this->SetWindowText( _T("neuer Titel") );Wüsste nicht, warum es nicht funktionieren sollte

grüssle

-
Huhu nochmal...
Natürlich funktioniert das mit nem kleinen Testprojekt auch bei mir(wie sollte es sonst anders sein...;o) ). Da poppt auch wieder dieses kleine Auswahlfenster auf wenn ich "this->..." eingebe.
Das hab ich meinem Projekt aber nich weil ich ein zwei mal kopiert habe....
Da scheintdas so zu sein, dass die IDE die Klassen und Methoden-Info nicht mehr richtig verarbeitet. Aber das is ja nicht so wichtig.
Die Frage wäre nun ob das nur bei ner Nachricht, wie eben Button Down, funktioniert, weil er da ja den Dialog eh neu "malt". Aber ich hätt es halt gern so, dass er das schon beim Erstellen des Dialogs macht...
Ich machs ma konkret.....
Der Dialog hat an und für sich den Namen "Neu erfassen"....
Und wenn ich dann im Programm auf alle anzeigen geh, und dann einen Eintrag anklick, kommt der gleiche Dialog und soll aber eben nen annern Titel haben.
Dazu lese ich zunächst die ganzen Daten in den Dialog aus der DB ein und übergebe auch den neuen Titel, etwa so:
Dlg.Titel="Was weiss ich"; (im Projekt ist das natürlich eine String Variable)Dann starte ich den Dialog mit "DoModal".... aber der alte Titel ist da. Wie du schon richtig meintest, muss ich sicher des "this->" Zeugs in die Dialog Klasse schreiben.
Ich werd ma weiter probiern.
Ist ja schon ma ne neue Erkenntnis, daß es prinzipiell so klappen muss...Mal sehen wo der Wurm hängt...
Aber nochma Danke!!!
Werd sicher jetzt öfter mal hier rein schaun....
bis morgen...
Schönen Feierabend....
-
"this-> zeug"
this zeigt immer auf den aktuellen dialog
wenn du
class bla
{
this == *bla
}class blu
{
this == *blu
}usw
um den titel zu aendern einfach in der klasse welches das fenster verwaltet das setwindowtext aufrufen, (nicht in dem parent fenster welches das fenster mit DoModal erstellt)
und auch erst aufrufen sobald das fenster fertig erstellt wurde {zb bei OnInitDialog}
-
*APPLAUS*
Es funktioniert.
Hattest vollkommen Recht, funktioniert erst wenn es in der IniDialog drinsteht. Logisch, da dann ja erst die Instanz der Klasse wirklich da ist.
Danke dafür!!! Wär ich allein nie und nimmer drauf gekomm..(oder hätt den Hammer rausgeholt...
....
Ganz großes Kino...
Vergesst alle teuren Bücher...n gutes Forum bringt echt mehr...;o)
Nu muss ich aber zum Bus flitzen.....

Man liest sich.... :xmas1:
-
Hallo zusammen,
ich bin der Neue und möchte diesen Thread gleich mal aufgreifen. Und zwar versuche ich die Titelleiste eines Dialogs in einer WM5 Applikation zu ändern, aber ohne Erfolg.
Der Dialog wird mit DoModal() erzeugt und in der Methode OnInitDialog() wird mit SetWindowText(L"Super Dialog") der Titel geändert. Aber es tut sich nichts.
Wie gesagt dass ganze läuft auf Windows Mobile 5. Kann jemand helfen?
Grüße
-
Hy...
Also ich muss einleitend sagen , dass ich nicht weiß, ob das WM5 1:1 mit der MFC programmierbar ist.
Aber bei meinem Programm ging es auch mit dem Befehl, den Du (ich darf doch Du sagen?!..;o) ), genutzt hast NICHT.
Probier mal mit
this->SetWindowText(m_Titel);
Die OnInitMethode im Dialog ist schon ok...
da steht das bei mir auch drin...Viel Erfolg....

-
DasAlteLeid schrieb:
Das hab ich meinem Projekt aber nich weil ich ein zwei mal kopiert habe....
Da scheintdas so zu sein, dass die IDE die Klassen und Methoden-Info nicht mehr richtig verarbeitet. Aber das is ja nicht so wichtig.Schau dazu mal in die FAQ.

-
this->SetWindowText geht leider auch nicht. Ist aber eh das gleiche wie ohne this.
Mir ist etwas komisches aufgefallen. Ich erstelle einen Dialog und ändere den Titel. Der bleibt allerdings gleich und ändert sich nicht. Wenn ich aus diesem Dialog einen weitere Dialog öffne und diesen wieder schließe, hat sich auf einmal der Titel vom ursprünglichen Dialog geändert. Es sieht so aus, als würde da eine Art refresh oder sowas fehlen. Hat jemand eine Idee?
-
Invalidate();

-
estartu schrieb:
Invalidate();

und direkt danach ein UpdateWindow();
ist ein Erfahrungswert, da Invalidate() ja eigentlich 'nur' löscht.
Windows: Sicher ist Sicher
grüssle

-
Invalidate();
UpdateWindow();funktionieren leider auch nicht. Habe im MSDN gelesen, dass hier nur innere Bereich eines Dialoges betroffen nicht. Der Rahmen und somit auch der Titel werde nicht aktualisiert. Hat sonst jemand eine Idee?
-
aendert sich die schrift wenn du das fenster selber verschiebst oder es in der groesser veraenderst ? {kannst ja zum test kurzzeitig auf resizable stellen}
-
Im PreCreateWindow( gibts das im WM5??? ) dann noch:
cs.style &= ~FWS_ADDTOTITLE;oder heisst das da anders?
grüssle

-
Mr Evil schrieb:
aendert sich die schrift wenn du das fenster selber verschiebst oder es in der groesser veraenderst ? {kannst ja zum test kurzzeitig auf resizable stellen}
Leider gibt es in der Applikation nur Modale Fullscreen Dialoge. Sogar das Hauptfenster ist von dieser Sorte. Und so auf die Schnelle habe ich das jetzt nicht hinbekommen mit dem verschieben oder größe ändern.
Smitty schrieb:
Im PreCreateWindow( gibts das im WM5??? ) dann noch:
cs.style &= ~FWS_ADDTOTITLE;oder heisst das da anders?
Das scheint mir ein interessanter Ansatz zu sein. PreCreateWindow gibt es. Aber wie funktioniert das mit FWS_ADDTOTITLE? Muss ich da nicht irgendwo den neuen Text übergeben?