Fenster wird nicht neu gezeichnet
Hallo,
ich bin gerade dabei, mich in WinAPI und C++ einzuarbeiten.
Dabei hab ich folgendes Problem:
Ich habe einen Quellcode aus einem Tutorial abgewandelt, um zu sehen, ob ich alles verstanden habe.
Dabei soll in meinem Programm nichts weiter passieren, als dass ein Kreis von links nach rechts fährt.
Das ganze funktioniert soweit auch, wie man sehen kann, wenn man das Fenster in der Größe verändert,
nur wird es nicht von alleine neu gezeichnet.
Woran liegt das? Was fehlt in meinem Code noch?
ich bin gerade dabei, mich in WinAPI und C++ einzuarbeiten.
Dabei hab ich folgendes Problem:
Ich habe einen Quellcode aus einem Tutorial abgewandelt, um zu sehen, ob ich alles verstanden habe.
Dabei soll in meinem Programm nichts weiter passieren, als dass ein Kreis von links nach rechts fährt.
Das ganze funktioniert soweit auch, wie man sehen kann, wenn man das Fenster in der Größe verändert,
nur wird es nicht von alleine neu gezeichnet.
Woran liegt das? Was fehlt in meinem Code noch?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <windows.h>
#include <math.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
#define ID_ERSTER_TIMER 1
wchar_t szAppName = L"Ball'";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
MSG msg;
HWND hWnd;
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_CROSS);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = szAppName;
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wc);
hWnd = CreateWindow( szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static RECT rect;
static double horizontal;
switch(message)
{
case WM_CREATE:
{
SetTimer(hWnd, ID_ERSTER_TIMER, 10, NULL);
return 0;
}
case WM_SIZE:
{
rect.right = LOWORD(lParam);
rect.bottom = HIWORD(lParam);
return 0;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDC;
hDC = BeginPaint(hWnd, &ps);
{
HBRUSH hOldBrush = (HBRUSH)SelectObject(hDC, CreateSolidBrush(RGB(0,0,255)));
Ellipse(hDC, 0+horizontal,50,50+horizontal,100); //links, oben, rechts, unten
DeleteObject(SelectObject(hDC,hOldBrush));
}
EndPaint(hWnd, &ps);
return 0;
}
case WM_TIMER:
{
switch(wParam)
{
case ID_ERSTER_TIMER:
{
RECT InvalRect;
horizontal += 5;
InvalRect.left = 0 + horizontal -50;
InvalRect.top = 50 -50;
InvalRect.right = 50 + horizontal +50;
InvalRect.left = 100 +50;
InvalidateRect(hWnd, &InvalRect, TRUE);
break;
}
}
return 0;
}
case WM_DESTROY:
{
KillTimer(hWnd, ID_ERSTER_TIMER);
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 179256
Url: https://administrator.de/forum/fenster-wird-nicht-neu-gezeichnet-179256.html
Ausgedruckt am: 10.04.2025 um 21:04 Uhr
1 Kommentar