[WINAPI] Rechteck neuzeichnen

Hallöschen leute,
konnte mich obwohl wir weihnachten haben nicht c++ losreißen und hab mit winapi weiter gemacht.

zu meinem problem:
hab ein fenster erstellt und zeichne dort ein rechteck. wenn nun die message kommt „WM_RBUTTONDOWN“ soll der wert von x um 10 verändert werden. soweit ja nicht wirklich was besonderes ist nur zum testen gewesen. aber er zeichnet mir das rechteck nicht mit den neuen werten.

hier meine callback funktion:

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 HPEN rot = CreatePen(PS\_SOLID,2,RGB(255,0,0));

 int x=0,\*px;
 px = &x;

 switch(message)
 {
 case WM\_PAINT:
 {
 PAINTSTRUCT ps;
 HDC hdc;

 hdc = BeginPaint(hwnd,&ps);
 SelectObject(hdc,rot);
 Rectangle(hdc,\*px,100,200,200);
 EndPaint(hwnd,&ps);
 break;
 }
 case WM\_RBUTTONDOWN:
 {
 \*px+=10;
 //InvalidateRect(hwnd, NULL, TRUE);
 return 0;
 break;
 }
 case WM\_DESTROY:
 {
 PostQuitMessage (0); /\* send a WM\_QUIT to the message queue \*/
 }
 default: /\* for messages that we don't deal with \*/
 return DefWindowProc (hwnd, message, wParam, lParam);
 }
 return 0;
}

Hallo Fragewurm,

hab ein fenster erstellt und zeichne dort ein rechteck. wenn
nun die message kommt „WM_RBUTTONDOWN“ soll der wert von x um
10 verändert werden. soweit ja nicht wirklich was besonderes
ist nur zum testen gewesen. aber er zeichnet mir das rechteck
nicht mit den neuen werten.

Wieso sollte es? :wink:

x ist eine lokale Autovariabe. Sie existiert also nur so lange, wie du dich in der Funktion WindowProcedure() befindest.

Bei jeden Aufruf von WindowProcedure() wird x=0 ausgeführt.

Du musst x entweder global deklarieren oder als static.

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
 HPEN rot = CreatePen(PS\_SOLID,2,RGB(255,0,0));

 **static int x=0;**
 int \*px;
 px = &x;

 switch(message)
 {
 .
 .
 .
 }
 return 0;
}

MfG Peter(TOO)

danke für die schnelle antwort jetzt funktionierts.
gruß michi