WMPAINT, kann den Text nicht positionieren.
-
susan81 schrieb:
Hallo, ich habe das Problem den Text im Fenster zu positionieren.
.
.
.
wenn ich DT_TOP verwende wird gar kein text mehr angezeigt.könnt ihr mir helfen ??
vielen dank
gruß
susannedas war ja grad mein problem
.. habe es mit DT_TOP versucht. gleich am anfang. aber dann wird komischweise gar kein text mehr angezeigt. bleibt also komplett leer.
hast du ne idee ?EDIT:
siet dann so aus:
DrawText(hdc, mOdus, -1, &rt, DT_SINGLELINE | DT_LEFT| DT_TOP ) ;
-
Nein! Denn du holst Dir das Cleint Rect und zeichnest in die Linke obere Ecke. Bei mir funktioniert das wie erwartet!
-
hmm.. das versteh ich nicht. denn es SOLLTE ja auch eigentlich so funktionieren. dass es jetzt bei dir geht verwundert mich umso mehr.
also nach ganz links bekomm ich es ja auch .. nur dann mittig. aber sobald ich das TOP mit reinbringe bleibt meine box leer.hast du ne idee wie ich das überprüfen kann warum das so ist? wie ich da jetzt am besten nach dem fehler suche ??
danke dir vielmals !!!
-
Du erzeugst doch noch einen Bar mit CommandBar_Create!
Kann es sein, dass dieses Element einfach Deinen Text verdeckt!Du solltest Dir einfach mal Deinen Code ansehen, bzw. was wo in Deinem Fenster liegt!

-
stimmt du hast recht.. es liegt dann genau unter meiner menuebar.. wenn ich die ausblende steht der text an dieser stelle. dachte das wird automatisch runtergesetzt dann.. naja geirrt

also muss ich dir koordinaten von hand eingeben ? ich würde es ja gerne direkt unter der menuebar haben.
-
Dasnn besorge Dir doch die Koordinaten des Commandbars und justiere einfach rt.top!
-
ich hab es versucht.
DrawText(hdc, lAbelTextBuffer, _tcslen(lAbelTextBuffer), &rt, DT_SINGLELINE | DT_VCENTER | DT_CENTER ) ; DrawText(hdc, mOdus, -1, rt.top, DT_SINGLELINE | DT_LEFT| DT_TOP ) ;aber dann bekomme ich eine fehlermedlung.
-->Dasnn besorge Dir doch die Koordinaten des Commandbars.
wie mache ich das denn? sorry bin noch nicht so firm in der ganzen sache

DANKE !!
-
Dann solltest Du evtl. erstmal ein paar Basics lernen, bevor Du aktiv solche Tools baust...
rt.top ist eine Koordinate und kein RECT, das DrawText erwartet!
case WM_PAINT: RECT rt, rb; hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rt); GetWindowRect(g_hwndCB, &rb); rt.top += rb.bottom-rb.top; DrawText(hdc, mOdus, -1, &rt, DT_SINGLELINE|DT_LEFT|DT_TOP) ; EndPaint(hWnd, &ps); break;
-
das ist auf jeden fall einleuchtend

und es funktioniert sogar !!

vielen dank !!
-
ich habe noch eine frage

hoffe du hilfst mir nochmal
ich habe eine ausgabe auf meinem bildschirm die ich ebenfalls mit drawtext erzeuge.
DrawText(hdc, lAbelTextBuffer,_tcslen(lAbelTextBuffer), &rt, DT_WORDBREAK | DT_VCENTER | DT_CENTER ) ;lAbelTextBuffer ist ein TCHAR und so gefüllt:
401229702525
401229702525
401229702525
401229702525
HUI-9999-01-10L
wenn ich, wie oben beschrieben, den string ausgeben möchte zeigt er mir aber immer nur den letzten wert an. also "HUI-9999-01-10L".
kannst du mir sagen warum das so ist ? und wie ich das problem vllt lösen kann ?danke dir vielmals !!
-
Weil Du einfach den Text überschreibst.
Lies doch ienfach mal die Doku! Das wär doch mal was. Dann würdest Du auch wiossen, dass Du das Ausgabe Rectangle verändern musst.Ich beantworte auch Fragen von Neulingen, nur scheint mir bei Dir kein Lernwille/effekt vorhanden zu sein. Ich wünsche Dir noch einen guten Tag....
-
recht hast du. werde versuchen mich selbst weiter reinzuarbeiten. hoffe ich komme auf "berechtige" ungereimtheiten noch antwort
.. sonst bin ich erstmal lesen. 
danke
-
ja puuuhh.. jetzt les ich grad das man mit drawtext gar nicht scrollen kann. also es soll schon gehen aber nur mit hohem aufwand.
grml.. also muss ich es ganz anders ausgeben....=/
-
Sag mal...
Du musst dochnur für jede Ausgabe rt.top nach unten verschieben. Was willst Du mit rollen?
-
also mit der ausgabe hab ich es noch nicht hinbekommen.suche die ganze zeit.. aber noch nichts gescheites..
ich hab gelesen, dass mann wenn man über drawtext ausgibt nicht scrollen kann. ich weiss nicht ob das der wahrheit entspricht.
ich habe auf meinem kleinen CE desktop ja nur begrenzt platz. ich würde schätzen 10 zeilen ab mitte nach unten.wenn ich aber mehr zeilen habe verschwinden die ja dahin wo man sie nicht mehr sieht. wenn ich nicht scrollen kann, unerreichbar.
oder ist das trotzdem möglich ?
-
guten morgen

ich habe versucht deinem rat "fuer jede ausgabe rt.top nach unten zu verschieben" leider habe ich dazu nichts gefunden oder ähnliches.
kannst du mir bitte nochmal helfen ?? ich habe hier was versucht damit du siehst das ich mir auch gedanken dazu gemacht habe. ich hab auch schon viel dazu gelernt. aber anscheind nicht das richtige ^^- ich habe versucht eine schleife zu schreiben in der mein char ausgegeben wird. aber das hat auch nicht funktioniert,bekomme immer die meldung:
initialization of 'i' is skipped by 'case' label. also schleifen gingen nicht.wie kann ich rt.top nach unten verschieben? ich muss dann doch irgednwie sagen, dass ich über die anzahl der zeilen in dem TCHAR eine ausgabe haben möchte.
also ohne for bzw while schleife geht das doch nicht oder?
ich könnte wie in deinem beispiel
rt.top += rb.bottom-rb.top;auch rechnen. und die neue ausgabe einen unter dem zuvor ausgegebenen rt.top machen. soweit wär das ja logisch. aber das ganze müsste ich dann doch trotzdem in einer schleife ausgeben oder??
ich hoffe du kannst mir noch nen tip geben.
danke dir !!
EDIT:
mein code sieht jetzt so aus. hoffe ich bin halbwegs auf dem richtigen weg.
case WM_PAINT: RECT rt, rb; hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rt); GetWindowRect(g_hwndCB, &rb); rt.top += rb.bottom-rb.top; DrawText(hdc, mOdus, -1, &rt, DT_SINGLELINE | DT_LEFT| DT_TOP ) ; *lAbelTextBuffer = TfillMsgPuffer(); while(cCount < linecOunt){ DrawText(hdc, lAbelTextBuffer,_tcslen(lAbelTextBuffer), &rt,DT_SINGLELINE | DT_VCENTER | DT_CENTER ) ; cCount ++; rt.top += rt.bottom - rt.top; } EndPaint(hWn
-
soweit hab ichs jetzt.
aber irgednwie scheint die anzahl der ausgegebenen zeilen noch nicht zu passen. er macht irgendiwe zu viele.
und er zeigt immer nur den letzten wert an. warum weiss ich immer noch nicht
.... TCHAR TfillMsgPuffer(void){ FILE* fp; TCHAR mystring [100]; fp=_tfopen(_T("My Documents/scan.txt"),_T("r")); if (fp != NULL){ while(_fgetts(mystring,100,fp)) { mystring[_tcslen(mystring)-1] = 0; _putts(mystring); linecOunt ++; } } fclose(fp); lAbelTextBuffer = mystring; return *lAbelTextBuffer; } .... case WM_PAINT: RECT rt, rb; hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rt); GetWindowRect(g_hwndCB, &rb); rt.top += rb.bottom-rb.top; DrawText(hdc, mOdus, -1, &rt, DT_SINGLELINE | DT_LEFT| DT_TOP ) ; *lAbelTextBuffer = TfillMsgPuffer(); while(linecOunt > cCount){ DrawText(hdc, lAbelTextBuffer,_tcslen(lAbelTextBuffer), &rt,DT_SINGLELINE | DT_VCENTER | DT_CENTER ) ; rt.top = rt.top + rb.bottom - rb.top; cCount ++; } EndPaint(hWnd, &ps); break;hoffe irgednwer hilft mir noch

EDIT:
achja.. und vllt nen tip wie ich das scrollproblem lösen kann.
danke !!