hMainWnd refresht nicht, wieso? >:(



  • hi leute!

    ich habe aus so ein tutorial-beispiel aus dem netz etwas modifiziert.
    sinn soll sein, einfach einen text anzuzeigen, und diesen mit KEY_UP und KEY_DOWN zu scrollen. bin noch nicht sehr weit, da ich beim austesten feststelle, dass das fenster sich nie aktualisiert.
    wie bekomme ich das fenster dazu, sich z.b. alle 0,2 sekunden zu aktualisieren?

    habe einen teststring "toplinestr", der den wert von "int topline" enthält.
    int topline wird jedesmal geändert, wenn der UP key oder der DOWN key gedrückt werden. habe das (mit msgbox) getestet, funktioniert.
    aber der text wird nie refreshed 😞
    wie bekomme ich es also dazu, sich zu aktualisieren und somit
    "case WM_PAINT" in "LRESULT CALLBACK TestWndProc" ausgeführt wird???

    vielen dank im voraus.

    grüsse,

    ---loki

    #define STRICT
    #define WIN32_LEAN_AND_MEAN
    
    #include <stdio.h>
    #include <windows.h>
    #include <windowsx.h>
    
    int topline;
    char toplinestr[255];
    
    // NOTE: 32 lines are shown
    
    // char screenText[] = "hallo";
    
    int WINAPI WinMain(HINSTANCE	hInstance,		// Instanzhandle der Anwendung
    				   HINSTANCE	hPrevInstance,	// Handle des 'Vorgängers'
    				   LPSTR		lpstrCmdLine,	// String mit Kommandozeilenparametern
    				   int			iCmdShow);		// Anzeigestatus des Hauptfensters
    
    LRESULT CALLBACK TestWndProc(HWND	hWnd,		// Handle des Fensters, für welches die Nachricht
    												// bestimmt ist
    							 UINT	iMessage,	// Code der Nachricht
    							 WPARAM	wParam,		// erster Zusatzparameter der Nachricht
    							 LPARAM	lParam);	// zweiter Zusatzparameter der Nachricht
    
    int WINAPI WinMain(HINSTANCE	hInstance,
    				   HINSTANCE	hPrevInstance,
    				   LPSTR		lpstrCmdLine,
    				   int			iCmdShow)
    {
    	WNDCLASS			WndClass;	// Datenstruktur zur Definition der Fensterklasse
    	HWND				hMainWnd;	// Handle des Hauptfensters
    	MSG					Message;	// Datenstruktur zur Aufnahme einer Nachricht
    
    	// erster Schritt: Festlegen der Eigenschaften der Klasse des hauptfensters
    	WndClass.lpszClassName="TestWndClass";						// Name der Fensterklasse
    	WndClass.lpfnWndProc=TestWndProc;							// Zeiger auf die Fensterprozedur
    	WndClass.hInstance=hInstance;								// Instanzhandle der Anwendung
    	WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);				// Standardicon laden
    	WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);				// Kreuzförmigen Cursor laden
    	WndClass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);	// Schwarz als Hintergrundfarbe 
    	WndClass.cbClsExtra=0;										// keinen Speicher für die Klasse reservieren
    	WndClass.cbWndExtra=0;										// keinen Speicher für neue Fenster reservieren
    	WndClass.style=CS_OWNDC | CS_HREDRAW | CS_VREDRAW;						// Neuzeichnen bei Änderung der Höhe oder der Breite des Fensters
    	WndClass.lpszMenuName=NULL;
    
    	// zweiter Schritt: Fensterklasse des Hauptfensters anmelden
    	if(!RegisterClass(&WndClass))
    	{
    		// FEHLER: Fensterklasse wurde nicht angemeldet
    		MessageBox(NULL,"Die Fensterklasse des Hauptfensters wurde nicht angemeldet",
    				   "Fehler",MB_ICONSTOP|MB_OK);
    		return 0;
    	}
    
    	// dritter Schritt: Hauptfenster öffnen
    	hMainWnd=CreateWindow("TestWndClass",
    						  "window title",
    						  WS_BORDER,
    						  CW_USEDEFAULT,
    						  CW_USEDEFAULT,
    						  CW_USEDEFAULT,
    						  CW_USEDEFAULT,
    						  NULL,
    						  NULL,
    						  hInstance,
    						  NULL);
    
    	if(hMainWnd==NULL)
    	{
    		// FEHLER: Hauptfenster wurde nicht geöffnet
    		MessageBox(NULL,"Hauptfenster wurde nicht geöffnet",
    				   "Fehler",MB_ICONSTOP|MB_OK);
    		return 0;
    	}
    
    	// Hauptfenster anzeigen und zum ersten Mal aktualisieren
    	ShowWindow(hMainWnd,iCmdShow);
    //	ShowCursor(0);
    	UpdateWindow(hMainWnd);
    
    	// vierter Schritt: Eintritt in die Nachrichtenverarbeitung
    	while(GetMessage(&Message,NULL,0,0))
    	{
    		// Nachricht übersetzen (nur wichtig Nachrichten, welche die Tastatur betreffen)
    		TranslateMessage(&Message);
    
    		// Nachricht weiterleiten
    		DispatchMessage(&Message);
    
    		TestWndProc(HWND hMainWnd, UINT WM_PAINT, WPARAM 0, LPARAM 0)
    
    	}
    
    	// Ende der Anwendung
    	return Message.wParam;
    }
    
    // --------------------------------------------------------------------------------------------
    
    LRESULT CALLBACK TestWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
    {
    	HDC				hDC;
    	PAINTSTRUCT		PaintStruct;
    	RECT			Rect;
    	UINT			iReturn;
    
    	// alle 'interessanten' Nachrichten abfangen und verarbeiten
    	switch(iMessage)
    	{
    		case WM_CREATE:
    			// ein Fenster soll geöffnet werden
    
    			return 0;
    
    		case WM_CLOSE:
    			// ein Fenster soll geschlossen werden
    			PostQuitMessage(0);
    
    			return 0;
    
    		case WM_DESTROY:
    			// Das Hauptfenster wird geschlossen
    
    			// Anwendung beenden
    			PostQuitMessage(0);
    			return 0;
    
    		case WM_KEYDOWN:
    
    			{
    
    			switch(wParam)
    			{
    
    			// Exit app on space or escape keypress
    			case VK_ESCAPE:
    				{
    					PostQuitMessage(0);
    					return 0;			
    				}
    				break;
    
    			case VK_UP:
    				{
    					topline--;
    					wsprintf(toplinestr, "%d", topline);
    //					MessageBox(NULL, toplinestr,   "WM_KEYDOWN info", MB_ICONINFORMATION|MB_OK);
    					break;
    				}
    
    			case VK_DOWN:
    				{
    					topline++;
    					wsprintf(toplinestr, "%d", topline);
    //					MessageBox(NULL, toplinestr,   "WM_KEYDOWN info", MB_ICONINFORMATION|MB_OK);
    					break;
    				}
    
    			return 0;
    			}
    
    		}
    
    		case WM_PAINT:
    			// der Fensterinhalt muß neu gezeichnet werden
    
    			// Gerätekontext beschaffen
    			hDC=BeginPaint(hWnd,&PaintStruct);
    
    			// Abmessungen des Fensters bestimmen
    			GetClientRect(hWnd,&Rect);
    
    			// green text
    			SetTextColor(hDC,RGB(3,226,159));
    
    			// schwarzer Hintergrund
    			SetBkColor(hDC,RGB(0,0,0));
    
    			// Text zeichnen
    			DrawText(hDC, toplinestr,-1,&Rect, 0);
    
    			// Gerätekontext freigeben
    			EndPaint(hWnd,&PaintStruct);
    
    			return 0;
    	}
    
    	// alle bis jetzt noch nicht verarbeiteten Nachrichten standardmäßig verarbeiten
    	return DefWindowProc(hWnd,iMessage,wParam,lParam);
    }
    


  • sh*t, falsches forum. wollte eigentlich nach WinAPI. sorry 😞



  • Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • danke 🙂



  • Mit InvalidateRect geht das...



  • danke, werd ich mir mal anschauen...



  • thanx, hat damit perfekt geklappt.


Anmelden zum Antworten