JohnnyEnglish
Grünschnabel
Hallo!
Ich arbeite mit C, der Windows API und somit GDI. Ich zeichne direkt ins Fenster. Nun gibt es Benutzereingaben, welche eine komplette Neuzeichnung des Fensterinhalts bewirken sollten. Bei mir funktioniert das aber nicht.
Das meiste meines Codes ist in der Message-Loop:
Schon hier funktioniert UpdateWindow nicht. Er sendet nicht einmal ein WM_PAINT. Wenn ich anstelle von UpdateWindow() direkt zu WM_PAINT springe, macht er zwar meine Malanweisungen, auf dem Bildschirm tut sich aber auch nichts.
Einzig bei Resizes und Maximierungen zeichnet er alles neu.
Das funktioniert z. B. auch nicht:
Ich muss also immer die Fenstergrösse ändern, um auf dem aktuellen Stand zu sein.
Meine Nachrichtenschleife sieht so aus:
Wie kann ich einen kompletten Repaint auch ohne Fenstergrössenänderung erzwingen?
WM_PAINT sieht übrigens ungefähr so aus:
Ich arbeite mit C, der Windows API und somit GDI. Ich zeichne direkt ins Fenster. Nun gibt es Benutzereingaben, welche eine komplette Neuzeichnung des Fensterinhalts bewirken sollten. Bei mir funktioniert das aber nicht.
Das meiste meines Codes ist in der Message-Loop:
Code:
WM_CREATE:
hDC = GetDC(mainWindow);
statusFont = CreateFont(15, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, NULL);
SelectObject(hDC, statusFont);
InvalidateRgn(mainWindow, NULL, FALSE);
SetUpCoordinates();
UpdateWindow(mainWindow);
Schon hier funktioniert UpdateWindow nicht. Er sendet nicht einmal ein WM_PAINT. Wenn ich anstelle von UpdateWindow() direkt zu WM_PAINT springe, macht er zwar meine Malanweisungen, auf dem Bildschirm tut sich aber auch nichts.
Einzig bei Resizes und Maximierungen zeichnet er alles neu.
Das funktioniert z. B. auch nicht:
Code:
case WM_KEYDOWN:
switch(wParam)
{
case VK_F12:
extendedView = !extendedView;
SetUpCoordinates();
}
UpdateWindow(mainWindow);
Ich muss also immer die Fenstergrösse ändern, um auf dem aktuellen Stand zu sein.
Meine Nachrichtenschleife sieht so aus:
Code:
MSG msg;
MainWindow = CreateMainWin();
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
}
}
Wie kann ich einen kompletten Repaint auch ohne Fenstergrössenänderung erzwingen?
WM_PAINT sieht übrigens ungefähr so aus:
Code:
BeginPaint(mainWindow, &ps);
SetBkColor(hDC, RGB(200, 200, 200));
SetTextColor(hDC, 0);
SelectObject(hDC, CreateSolidBrush(RGB(200, 200, 0)));
FillRect(hDC, &statusBar, CreateSolidBrush(RGB(200, 200, 200)));
EndPaint(mainWindow, &ps);
break;