Den Cursor nach dem öffnen mit OpenDocumentFile auf bestimmte position setzten
-
Servus,
wie kann ich den blinkenden Cursor in meinem txt-File nach dem öffnen mit OpenDocumentFile auf eine bestimmte Zeile bzw. position setzen?
ist es Vielleicht auch möglich diese Zeile dann zu markieren?
Vielen Dank schonmal
mfg
-
Das ist eine Sache des Views. Verwende UpdateAlViews mit einem Hint. In dem OnUpdateHandler setzt Du die Markierung in dem CEdit einfach mei SetSel!
-
Danke schon mal für deine Antwort aber leider versteh ich nur
.Also wenn ich jetzt per
CDocument * ptr =pDocTemplate->OpenDocumentFile("Pfad meiner Datei");Meine Datei Öffne, wie komm ich dann weiter?
muss ich irgendwelche Funktionen überschreiben?
rufe ich als nächstes UpdateAllViews auf? welche Paramter übergebe ich denn dieser Funktion dann?ich bin totaler neuling und komm im moment nicht weiter. Danke für eure Hilfe.
mfg
Alex
-
In Deinem Document gibt es die virtuelle Funktion OnOpenDocument, die kannst Du ohne Probleme für solch eine Funktion nutzen. Um dem View was mitzuteilen benutzt Du dann im Dokument UpdateAllViews (auch wenn es nur einer ist).
-
Ok das könnte mich einen Schritt weiter bringen. Aber wie rufe ich jetzt in der virtuellen Funktion OnOpenDocument die funktion SetSel auf ich benötige doch irggendwie eine Instanz von meinem Dokument. Also zum Beispiel mydoc.SetSel oder mydoc->SetSel oder kann ich die einfach so aufrufen? also ohne . oder ->. einfach mit SetSel??
Danke schon mal für die Hilfe.
mfg
Alex
-
Anders gefragt. Wie bekomme ich den pointer her um die funktion zu vervollständigen?
CEdit * ptr= ????; ptr->SetSel(0,-1);mfg
Alex
-
Das sind Basics! Und Du solltest einfachmal etwas mehr probieren!
Zudem habe ich Dir alle Angaben schon gegeben.1. Dein CEditView kann nur SetSel ausführen, denn nur er kennt das Control
2. OnOpenDocument kannst Du einfach in Deiner CDocument Klasse überschreiben.
3. Dort kannst Du UpdateAllViews aufrüfen und entsprechende Hint Parameter mitgeben, die infos für den View sind.
4. Im View überschreibst Du OnUpdate, dort wertest Du die Hints aus und führst den SetSel durch.Das ist der richtige Weg in der Doc/View Architektur. Es werden sicherlich auch noch Tipps kommen die Dir den View Zeiger in Dein Dokument zaubern (auch das geht), ist aber für mich unakzeptables Design.
BTW: Alles das habe ich bereits geschrieben!
-
OK vlt. mal zu meiner Verteidigung. Das ist das erste mal das ich mit MFC arbeite und eigentlich auch mit Objektorientierter Programmierung. eigentlich bin ich Automatisierungstechniker und Code in AWL (Anweisungsliste). Naja und von einer View/Doc Architektur hatte ich vorher also auch noch nicht gehört. genau deshalb fehlen mir diese Basics.

Deshalb bin ich um so dankbarer für deine Antwort. weil über google findet man zu diesem Thema nicht viel bis gar nichts.
Begriffe wie Hints und View und Doc sind für mich quasi Fremdwörter.
Also ich werd jetzt mal ein bischen rumprobieren aber es könnte sein, dass ich nochmal ne Frage habe.
Sorry. und Danke.
mfg
Alex
-
OK deine Hinweise waren jetzt echt Hilfreich. schaffe es tatsächlich Text zu markerieren. Ausführen tu ich das so:
1. ich überschreibe in CmyDoc OnOpenDocument
2. ich rufe UpdateAllViews auf und Übergebe als pSender NULL und als Hint den Wert 1
3. dann überschreibe ich in meiner View OnUpdate folgendermaßen:
void CDBView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { if(lHint==1) { CEdit * ptr = (CEdit*)this; ptr->SetSel(0,-1); } }dann tut alles wenn ich das Document öffne wird der gesamte Text markiert.
Aber die funktion SetSel kann ich dennoch nicht aufrufen. nur eben über den Umweg mit meinem this-zeiger.
Ist das jetzt sauber?
der this Zeiger hat den Typ CEditView HWnd. Bekomme ich den nirgendwo anders her außer über den this-zeiger.
Das mit dem Hint hab ich jetzt glaub ich auch verstanden.
mfg
Alex
-
Alex171184 schrieb:
Aber die funktion SetSel kann ich dennoch nicht aufrufen. nur eben über den Umweg mit meinem this-zeiger.
Ist das jetzt sauber?der this Zeiger hat den Typ CEditView HWnd. Bekomme ich den nirgendwo anders her außer über den this-zeiger.
Der richtige Weg ist CEditView::GetEditCtrl!
Alle Views, die sich aus einem Control ableiten verfügen über eine entsprechende Get Funktion.
BTW: Diese Funktion macht auch nichts anderes als den selben cast! Aber es ist der "richtige Weg"
