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.