Probleme mit Textausgaben
-
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!?