Probleme mit Textausgaben



  • 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 == TRUE und == FALSE zu prüfen ist Quatsch.



  • George Boole schrieb:

    Boolsche Werte auf == TRUE und == FALSE zu prüfen ist Quatsch.

    huh!?


Anmelden zum Antworten