Probleme mit Textausgaben
-
okay

aba ich muss ihn ja zeichen. da ich ihn ja brauche sonnt würde ich ihn ja nicht zeichen und später brauche ich ihn halt nicht mehr.
also einfach dann die textfarbe ändern?

das ich nich selber drauf gekommen bin!
is aba irgentwie doof, das man gdi objekte nicht einfach wieder entfernen kann.
Benutzt man eigentlich eher textout oder drawtext?
-
mann soll doch auch nur in WM_PAINT zeichen
Das halte ich für ein Gerücht. Ich verwende WM_PAINT garnicht. Prinzipiell brauchst du nur ein Handle zum Devicecontext (HDC) und kannst dann damit machen was und wann du möchtest.
DrawText hat mehr Optionen, wobei Textout simpler ist.
-
metapoint2011 schrieb:
aba ich muss ihn ja zeichen. da ich ihn ja brauche sonnt würde ich ihn ja nicht zeichen und später brauche ich ihn halt nicht mehr.
Dann zeichne ihn später eben nichtmehr!?
metapoint2011 schrieb:
also einfach dann die textfarbe ändern?

Nein verdammt, einfach den Text nicht zeichnen.
metapoint2011 schrieb:
is aba irgentwie doof, das man gdi objekte nicht einfach wieder entfernen kann.
Es sind eben keine Objekte, da gibts nichts zu entfernen. Wenn du auf eine Tafel malst und dann gerne an einer Stelle was andres malen willst musst du die Tafel zuerst löschen...
metapoint2011 schrieb:
Benutzt man eigentlich eher textout oder drawtext?
Je nachdem was man braucht, wär ja nicht so dass die beiden Funktionen genau das gleiche tun!?
Wenn dus ganz genau wissen willst dann einfach mal hier lesen

-
und wie zeichne ich einen text nicht?
gibts da eine funktion für oder was?
mit invalidaterect habe ich das ganze fenster neu gezeichnet.
nur kommt der text dann trozdem wieder nach dem minimieren.
oda hat einer ein kleines beispiel?
-
metapoint2011 schrieb:
und wie zeichne ich einen text nicht?
1. Du willst Text haben, also malst du Text in WM_PAINT.
2. Du willst Text jetzt nichtmehr haben also zeichnest du den entsprechenden Bereich des Fensters neu nur ab jetzt in WM_PAINT eben ohne den Text zu zeichnen. Wenn du TextOut/DrawText nicht aufrufst dann wird auch kein Text gemalt...
-
metapoint2011 schrieb:
und wie zeichne ich einen text nicht?
rofl

-
man.. ich habs immernochnicht "ganz" kappiert.
also meint ihr das z.b so:
wenn ich z.b einen button drücke, wird das fenster neu gezeichnet und dann ab einer bestimmen stellen in WM_PAINT weitergemalt?
ich zeige euch auch mal meinen code:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; static HWND hBtn1, hBtn2, hBtnStop, hEditU1, hEditU2, hEditCount, hEditTimer; static WCHAR wBufTime[100]; static RECT rc, rc1; static int iMin, iSdown; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_CREATE: hEditCount = CreateWindow(_T("edit"), _T("min"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_CENTER | ES_NUMBER, 130, 20, 60, 22, hWnd, (HMENU) 1, hInst, NULL); hBtn1 = CreateWindow(_T("button"), _T("Countdown setzen"), WS_CHILD | WS_VISIBLE | WS_BORDER, 34, 50, 150, 22, hWnd, (HMENU) 2, hInst, NULL); hEditU1 = CreateWindow(_T("edit"), _T("h"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_CENTER | ES_NUMBER, 110, 107, 22, 22, hWnd, (HMENU) 3, hInst, NULL); hEditU2 = CreateWindow(_T("edit"), _T("m"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_CENTER | ES_NUMBER, 145, 107, 22, 22, hWnd, (HMENU) 4, hInst, NULL); hBtn2 = CreateWindow(_T("button"), _T("Uhrzeit setzen"), WS_CHILD | WS_VISIBLE | WS_BORDER, 35, 137, 140, 22, hWnd, (HMENU) 5, hInst, NULL); hBtnStop = CreateWindow(_T("button"), _T("Timer stoppen!"), WS_CHILD | WS_BORDER, 45, 120, 140, 22, hWnd, (HMENU) 6, hInst, NULL); hEditTimer = CreateWindow(_T("edit"), NULL, WS_CHILD | WS_BORDER | ES_CENTER | ES_READONLY, 45, 35, 140, 22, hWnd, (HMENU) 7, hInst, NULL); break; case WM_SIZE: iMin = 0; rc.left = 0; rc.top = 0; rc.right = 0; rc.bottom = 0; rc1.left = 0; rc1.top = 0; rc1.right = 0; rc1.bottom = 0; break; case WM_TIMER: iMin -= 1; wsprintf(wBufTime, TEXT("Noch %d min."), iMin); SetWindowText(hEditTimer, wBufTime); if(iMin == 0) { KillTimer(hWnd, 1); shutdown(); } break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Menüauswahl bearbeiten: switch (wmId) { case SET_COUNT: { WCHAR wctBuf[10]; char ctBuf[10]; GetWindowText(hEditCount, wctBuf, 9); WideCharToMultiByte(CP_ACP, NULL, wctBuf, sizeof(wctBuf), ctBuf, sizeof(ctBuf), NULL, NULL); iMin = atoi(ctBuf); ShowWindow(hBtn1, SW_HIDE); ShowWindow(hBtn2, SW_HIDE); ShowWindow(hEditU1, SW_HIDE); ShowWindow(hEditU2, SW_HIDE); ShowWindow(hEditCount, SW_HIDE); rc.left = 10; rc.top = 10; rc.right = 220; rc.bottom = 85; rc1.left = 10; rc1.top = 95; rc1.right = 220; rc1.bottom = 170; InvalidateRect(hWnd, NULL, TRUE); ShowWindow(hBtnStop, SW_SHOW); ShowWindow(hEditTimer, SW_SHOW); wsprintf(wBufTime, TEXT("Noch %d min."), iMin); SetWindowText(hEditTimer, wBufTime); SetTimer(hWnd, 1, 60000, NULL); } break; case STOP_COUNT: KillTimer(hWnd, 1); ShowWindow(hBtnStop, SW_HIDE); ShowWindow(hEditTimer, SW_HIDE); rc.left = 0; rc.top = 0; rc.right = 0; rc.bottom = 0; rc1.left = 0; rc1.top = 0; rc1.right = 0; rc1.bottom = 0; InvalidateRect(hWnd, NULL, TRUE); ShowWindow(hBtn1, SW_SHOW); ShowWindow(hBtn2, SW_SHOW); ShowWindow(hEditU1, SW_SHOW); ShowWindow(hEditU2, SW_SHOW); ShowWindow(hEditCount, SW_SHOW); break; case IDM_\1: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); Rectangle(hdc, 10, 10, 220, 85); TextOut(hdc, 30, 22, _T("Countdown : "), sizeof("countdown : ")); Rectangle(hdc, 10, 95, 220, 170); TextOut(hdc, 41, 110, _T("Uhrzeit : "), sizeof("uhrzeit : ")); TextOut(hdc, 132, 110, _T(" : "), sizeof(" : ")); Rectangle(hdc, rc.left, rc.top, rc.right, rc.bottom); Rectangle(hdc, rc1.left, rc1.top, rc1.right, rc1.bottom); EndPaint(hWnd, &ps); break; case WM_DESTROY: ...............................
-
Vielleicht beschreib ich dir mal ganz langsam was du da programmiert hast: Du hast dein Fenster so programmiert dass beim Neuzeichnen (WM_PAINT) ein Text gezeichnet wird. Jetzt möchtest du dass der Text verschwindet. Also zeichnest du dein Fenster neu. Beim Neuzeichnen wird nun natürlich wieder der Text gezeichnet (schließlich hast dus ja so programmiert) was du jetzt aber nichtmehr möchtest -> Problem.
Was könnte man da tun?
Antwort: Wenn der Text nichtmehr erscheinen soll aufhören den Text hinzumalen.
-
okay z.b so in WM_PAINT? bText ist jetzt mal eine variable mit dem Typ BOOL
WM_PAINT: if(bText == FALSE) TextOut(.......); else if(bText == TRUE) irgentwas anderes oder return 0; break; ?????? hab ichs verstanden?
-
z.B. ja...
-
aahhhh... danke danke
ich bin so unschlau.. das sind so einfache dinge

-
metapoint2011 schrieb:
ich bin so unschlau.. das sind so einfache dinge

Ich würde eher meinen du hattest einfach nur ein Missverständnis darüber wie GDI funktioniert was deine Gedankengänge in die falsche Richtung gelenkt hat. Und schlussendlich isses dir ja klargeworden

-
stimmt

-
WM_PAINT: if(!bText) TextOut(.......); else if(bText) irgentwas anderes oder return 0;Boolsche Werte auf
== TRUEund== FALSEzu prüfen ist Quatsch.
-
George Boole schrieb:
Boolsche Werte auf
== TRUEund== FALSEzu prüfen ist Quatsch.huh!?