View Rahmen
-
Hallo @all,
Ich habe mal wieder ein Problem.
Und zwar habe ich eine SDI-Anwendung, im Mainframe soll eine vom Anwender geöffnete Text-Datei angezeigt werden. Ich habe Scroll-Balken, aber wenn ich nach unten gehe steht dort kein Text mehr (bricht quasie dort ab, wo die Ansicht zu Ende war)Hier mal ein Stück Code.void CxyView::OnDraw(CDC* pDC) { CBordnetzPruefDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CRect crRahmen; // Deklaration einer Rechteckvariablen GetClientRect(&crRahmen); // Rahmengrösse ermitteln pDC->DrawText(pDoc->GetMessage(), &crRahmen, DT_LEFT|DT_WORDBREAK); }
mit DT_CALCRECT bekomme ich gar nichts mehr angezeigt
und DT_NOCLIP klappt auch nicht.Wäre schön wenn mir jemand helfen kann.
Danke schon mal
Gruß Meil
-
Hallo,
hast du mal versucht den
crRahmen
größer zu machen als ClientRect?
Du kannst auch mal ein bischen mit der ScrollpositionGetScrollPos()
herumprobieren.
-
crRahmen habe ich bereits geändert, das brachte aber Nichts.
Was soll ich den mit SetScrollPos() machen ich habe in OnInitialUpdate folgendes stehen.void CxyView::OnInitialUpdate() { CScrollView::OnInitialUpdate(); CSize sizeTotal; // ZU ERLEDIGEN: Gesamte Größe dieser Ansicht berechnen sizeTotal.cx = 8000; // x-Achse sizeTotal.cy = 8000; // y-Achse SetScrollSizes(MM_TEXT, sizeTotal); }
Ciao Meil
-
in meiner zuletzt angezeigten Zeile bekomme ich ich Steuerzeichen, weiß vielleicht jemand, wie das zustande kommt?
-
Hatte keiner von euch bis jetzt dieses Problem?
Verändere ich die Rahmengrösse hilft mir das nicht weiter.
Ich bekomme immer nur eine bestimmte Anzahl von Zeilen angezeigt und in der letzten gezeigten, tauchen komische Zeichen auf.
Wenn euch was einfällt teilt es mir bitte mit.
Vielen Dank für die Mühe.
Ciao Meil
-
Hallo Meil,
ist schon länger her aber ich hab auch mal so etwas geschrieben. Ich geh mal davon aus, dass du CScrollView benutzt hast. Ist dann einfacher.
In OnDraw musst du die Write()-Funktion deines CDocument aufrufen, die du selbst geschrieben hast. Dort solltest du den CDC* benutzen, den dir OnDraw mitliefert. Der wird nämlich immer aktualisiert, was seinen Ursprung relativ zum gescrollten View angeht. Sonst müsstest du das SetViewportOrg aufrufen.
Wenn ich mich recht erinnere, musst du auch regelmäßig das SetScrollSizes aufrufen, um ihm zu sagen, bis wohin er eigentlich scrollen soll. In diesem Fall steht es aber recht gut in der MSDN drin.
CLoop
-
Hallo CLoop und auch ihr anderen,
leider bin ich nicht fähig deine Tips umzusetzen.
Ja ich verwende CSrollView, aber ich besitze keine Write()-Funktion was sollte hier denn drinn stehen, vielleicht hab ich sie ja anders benannt. Den CDC* verwende ich doch schon, oder ist es so nicht richtig?
Ich glaub das klappt nie
Gruss Meil
-
Hallo Meil,
ich hab zwar nie ein Textdokument abgebildet sondern Infos aus einer Datenbank, aber ich hab's so gemacht ( und stelle es mir bei dir genauso vor):
Du musst doch im CDocument den Text abgespeichert haben. Wenn es dort reinpasst, kannst du ja einen CString nehmen. Nehmen wir mal an, du hast nur ein Wort, was in deiner CStringvariablen gespeichert ist. Dann musst du dem CDC* in OnDraw sagen (über MyDocument->Write(CDC* pDC) )pDC->TextOut(x,y,string); //oder auch mit DrawText()
´
x,y: die Koordinaten für den Text im Koordinatensystem vom CDC*, du musst CDC::SetMapMode aufrufen, um festzulegen, wie das festgelegt wird.
jetzt schreibt er den Text immer an die gleiche Stelle im CDC, weil aber der Nullpunkt des CDC durch CScrollView immer verändert wird, wenn du scrollst, scrollst du sichtbar den Text.
Ich hoffe, das hilft dir erstmal weiter.
CLoop
-
Hallo CLoop,
es hat sich erledigt,
so peinlich es ist, muß ich es hier wohl doch mitteilen
TCHAR str[1000]; zun auslesen meiner Datei war zu klein.
Manchmal frag ich mich wie blind muß man sein!
Trotzdem vielen, vielen Dank für deine Hilfe.
Ciao Meil
-
Benutzt für sowas am besten ein dynamisches arry, also nict ein statiesch arry machen indem dann z.B. eine Millionen Chars reinpassen.
Ein dynamisches array ist zum Beispiel std::vector