Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Przeniesienie narysowanej elipsy o 10px

Ostatnio zmodyfikowano 2013-03-07 11:40
Autor Wiadomość
cooh
Temat założony przez niniejszego użytkownika
[WinAPI] Przeniesienie narysowanej elipsy o 10px
» 2013-03-06 23:40:22
Witam, w programie rysującym elipsy muszę dodać obsługę komunikatów LEFT ARROW key, RIGHT ARROW key, UP ARROW key, DOWN ARROW key, mającą na celu przesuwanie narysowanej elipsy o 10px w odpowiednim kierunku. Proszę o podpowiedź, gdzie znajdę współrzędne narysowanej elipsy, oto fragment kodu obsługujący komunikaty z myszy:

C/C++
case WM_LBUTTONDOWN:
SetCapture( hwnd );
StartX = short( lParam & 0x0000FFFF );
StartY = short( lParam >> 16 );
break;

case WM_MOUSEMOVE: //Komunikat odpowiedzialny za ruchy mysza
if( wParam & MK_LBUTTON )
{
    StopX = short( lParam & 0x0000FFFF );
    StopY = short( lParam >> 16 );
    InvalidateRect( hwnd, NULL, key ); //Ostatni parametr odpowiada za czyszczenie okna
}
break;

case WM_LBUTTONUP:
StopX = short( lParam & 0x0000FFFF );
StopY = short( lParam >> 16 );
ReleaseCapture();
InvalidateRect( hwnd, NULL, key ); //?????
break;

case WM_PAINT:
hdc = BeginPaint( hwnd, & ps );
Ellipse( hdc, StartX, StartY, StopX, StopY );
EndPaint( hwnd, & ps );
break;

case WM_DESTROY:
PostQuitMessage( 0 ); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc( hwnd, message, wParam, lParam );
}

Pozdrawiam, cooh.

Edit: może jest jakaś funkcja zwracająca współrzędne narysowanej elipsy?
P-77847
xevuel
» 2013-03-07 06:45:12
Modyfikuj zmienne podawane do funkcji [MSDN] Ellipse.
P-77849
cooh
Temat założony przez niniejszego użytkownika
» 2013-03-07 11:02:45
No właśnie próbowałem, ale prawdopodobnie zrobiłem to źle.

C/C++
case VK_UP:

Ellipse( hdc, StartX, StartY + 10, StopX, StopY + 10 );

break;

To na pewno jest źle, ale trochę się pogubiłem, proszę o pomoc.

Edit: Myślałem, że szybciej sobie z tym poradzę, więc późno się za to zabrałem, niestety program muszę oddać dzisiaj o godzinie 15 :(
P-77853
krzyk
» 2013-03-07 11:31:57
Parametry dla Ecllipse to pozycje a nie pozycja x,y,długość i wysokość.
P-77855
cooh
Temat założony przez niniejszego użytkownika
» 2013-03-07 11:40:09
No ok, to jeżeli chcę przesunąć elipsę w górę to muszę odjąć 10px od nTopRect (nBottomRect też?). Ale nadal nie wiem jak to wywołać w obsłudze VK_UP.

Edit: Chodzi mi głównie o to, co mam zrobić, jak już zmienię zmienne: StartY = StartY - 10; StopY = StopY - 10;
Pewnie odświeżyć okno i narysować raz jeszcze?

Edit2: Solved, gdyby komuś było potrzebne, to trzeba dodać obsługę komunikatu WM_KEYDOWN w następujący sposób (mój przypadek jest tylko dla VK_UP, reszta jest analogiczna):

C/C++
case WM_KEYDOWN:
switch( wParam )
{
case VK_UP:
    StartY -= 10;
    StopY -= 10;
    break;
}
InvalidateRect( hwnd, NULL, FALSE );
break;

Mój błąd polegał na umieszczeniu InvalidateRect w złym miejscu,

Piona.
P-77856
« 1 »
  Strona 1 z 1