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: case WM_LBUTTONDOWN: SetCapture( hwnd ); StartX = short( lParam & 0x0000FFFF ); StartY = short( lParam >> 16 ); break;
case WM_MOUSEMOVE: if( wParam & MK_LBUTTON ) { StopX = short( lParam & 0x0000FFFF ); StopY = short( lParam >> 16 ); InvalidateRect( hwnd, NULL, key ); } 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 ); break; default: return DefWindowProc( hwnd, message, wParam, lParam ); }
Pozdrawiam, cooh. Edit: może jest jakaś funkcja zwracająca współrzędne narysowanej elipsy? |
|
xevuel |
» 2013-03-07 06:45:12 |
|
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. 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 :( |
|
krzyk |
» 2013-03-07 11:31:57 Parametry dla Ecllipse to pozycje a nie pozycja x,y,długość i wysokość. |
|
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): 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. |
|
« 1 » |