現在、左クリックすると左上に、右クリックすると右下に円が移動するプログラムを作っているのですが、
クリックしても再描画されず、ウィンドウを最小化することで再描画されます。以下のプログラムです。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rc;
static int x1,x2,y1,y2;
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_CREATE:
x1 = 0;
y2 = 0;
x2 = 20;
y2 = 20;
break;
case WM_LBUTTONDOWN:
x1 -= 1;
y1 -= 1;
x2 -= 1;
y2 -= 1;
if(x1 < 0 || y1 < 0)
{
x1 += 1;
y1 += 1;
x2 += 1;
y2 += 1;
}
InvalidateRect(hWnd,&rc,TRUE);
break;
case WM_RBUTTONDOWN:
x1 += 1;
y1 += 1;
x2 += 1;
y2 += 1;
if(x2 > 30 || y2 > 30)
{
x1 -= 1;
y1 -= 1;
x2 -= 1;
y2 -= 1;
}
InvalidateRect(hWnd,&rc,TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
Ellipse(hdc,x1,y1,x2,y2);
EndPaint(hWnd,&ps);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}
クリックの際にInvalidateRect関数を使って無効領域を意図的に生成し、再描画命令を出すようにしているはずなのですが…