WinApi / TextOut / case

Windowsspezifische Probleme, WinAPI, conio.h
Antworten
Tonio
Beiträge: 7
Registriert: Fr Nov 13, 2015 8:39 am

WinApi / TextOut / case

Beitrag von Tonio » Mi Mär 02, 2016 1:41 pm

Hallo,

ich war zwischenzeitlich weg... Die Winapi ist wirklich eine sehr "um die Ecke gedachte" Telefonbuchvariante. Aber ich habe zur Zeit nichts anderes zur Wahl, Downloads sind hier blockiert und daheim ist die Kiste kaputt. Aber man lernt doch etwas über C durch die ganzen typedefs, auch wenn es anstrengend ist. Z.B. HBRUSH = HANDLE = PVOID = *PVOID. Das Problem konnte ich dann lösen. Jetzt hab ich ein anderes:
Ich kann innnerhalb der switchanweiseung nicht weiteren Text schreiben.

Code: Alles auswählen

	switch (uMsg)
	{
		case WM_PAINT:
			hdc = BeginPaint (hWnd, &ps);
		
			SetTextColor(hdc, Weiss);
			SetBkColor  (hdc, Schwarz);
			SelectObject(hdc, Ueberschrift);
			TextOut     (hdc, 400, 120, "MITARBEITERSTATUS", 17);
			SelectObject(hdc, Eingabe);
			TextOut		(hdc, 550, 300, "Eingabe:", 8);
			
			SetRect		(&rc, 400, 400, 420, 420);
			FillRect	(hdc, &rc, CreateSolidBrush(Weiss));

			
			
			TextOut		(hdc, 550, 400, "A = Alle Mitarbeiter  -  Status", 31);
			TextOut		(hdc, 550, 450, "E = Einzelner Mitarbeiter  -  Status", 36);
			TextOut		(hdc, 550, 500, "T = Termine", 11);
			TextOut		(hdc, 550, 550, "N = Neuen Mitarbeiter hinzufügen", 32);
			TextOut		(hdc, 550, 600, "O = Optionen", 12);
			TextOut		(hdc, 529, 650, "Esq = Beenden", 13);
			
			
//			DeleteObject(Ueberschrift);
//			EndPaint	(hWnd, &ps);
//			return 0;


				 
 	   	case WM_CHAR:
 	   		 		
 	   		 		
//			TextOut(hdc, 400, 600, "A", 1);

			switch (wParam)
			{
				case 'a' :
				case 'A' :
					TextOut (hdc, 400, 600, "A", 1);
					break;

// HIER LIEGT DAS PROBLEM: ES WIRD NICHTS "OUTgeTEXTET". ES PASSIERT NICHTS. 
			
				case 't' :
				case 'T' :
					Beep (600,1000);
					break;

				case 'e' :
				case 'E' :
					PostQuitMessage(0);
					return 0;
					break;

				case 27 :
					PostQuitMessage(0);
				 	return 0;
				 	break;
			}

			EndPaint	(hWnd, &ps);
			return 0;

		case WM_DESTROY:
        	PostQuitMessage(0);
        	return 0;
		}
		
	//falls Nachricht nicht behandelt wurde von Windows bearbeiten lassen
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
Um zu prüfen ob unterschiedliche Buchstaben vom Programm wahrgenommen werden und auch nur die programmierten, habe ich bei 't' bzw. 'T' den Ton eingefügt und bei 'e' bzw 'E' das Programm schließen lassen. Es fonktioniert. Aber TextOut funktioniert nicht. Wenn ich vor der switch (wPram) - Verzweigung das TextOut nicht auskommentiere, wird das "A" angezeigt. Ich habe auch alles mit if und else if probiert anstelle von switch - case. Funktioniert genauso bzw. bei 'a' / 'A' genauso nicht. Kann mir jemand helfen?

VG

Tonio

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: WinApi / TextOut / case

Beitrag von Xin » Mi Mär 02, 2016 4:14 pm

Da ist ein EndPaint auskommentiert, obwohl da ein BeginPaint ist.

Als nächstes stellt sich mir die Frage, ob das A vielleicht gezeichnet wird und dann wieder per WM_PAINT übermalt wird?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Tonio
Beiträge: 7
Registriert: Fr Nov 13, 2015 8:39 am

Re: WinApi / TextOut / case

Beitrag von Tonio » Do Mär 03, 2016 10:34 am

Xin hat geschrieben:Da ist ein EndPaint auskommentiert, obwohl da ein BeginPaint ist.

Als nächstes stellt sich mir die Frage, ob das A vielleicht gezeichnet wird und dann wieder per WM_PAINT übermalt wird?

Das EndPaint ist auskommentiert in der Mitte, da der Paint-Vorgang ja unter bestimmten Bedingungen fortgestzt werden soll. Ganz am Ende steht ja dann auch EndPaint.

Das "A" a ist an einer Stelle platziert, wo sonst nichts steht auf dem Bildschirm. Wie gesagt: Wenn es genau so

Code: Alles auswählen

 	   	case WM_CHAR:
 	   		 	   		 		
			TextOut(hdc, 400, 600, "A", 1);

			switch (wParam)
ohne Auskommentierung stehen gelassen wird, wird das "A" an dieser Stelle gezeichnet. Auch ein weiteres SetRect funktioniert unmittelbar vor switch(wParam) jedoch nicht innerhalb von switch(wParam). :?:

VG

Tonio

Antworten