Witam wszystkich i chcialbym prosic o rade poniewaz nie moge rozgrysc problemu, mianowicie mam kod na rysowanie elipsy jako tak dzialajacy:
#include "MyModule.h"
int StartX=50, StartY=50, StopX=100, StopY=100;
HPEN MyPen;
HBRUSH MyBrush;
COLORREF MyPenColor = RGB(0,0,255), MyBrushColor = RGB(255,255,0);
//Obs³uga komunikatu WM_CREATE wysy³anego do aplikacji w czasie tworzenia okna (przy uruchomieniu naszego programu)
void OnCreate(HWND hwnd)
{
MyPen = CreatePen(PS_SOLID, 3, MyPenColor);
MyBrush = CreateSolidBrush(MyBrushColor);
//utworzenie timera, którego okres wynosi 25 ms
SetTimer(hwnd, 1, 25, NULL);
}
//Obs³uga komunikatu WM_SIZE wysy³anego do aplikacji po zmianie rozmiaru okna
void OnSize(HWND hwnd, int width, int height, WPARAM wParam)
{
InvalidateRect(hwnd, NULL, TRUE);
}
//Obs³uga komunikatu WM_TIMER wysy³anego do aplikacji cyklicznie po up³yniêciu czasu zdefiniowanego w utworzonym timerze
void OnTimer(HWND hwnd, WPARAM timerID)
{
BYTE rValue, gValue, bValue;
StartX += 5 - (rand() % 11);
StartY += 5 - (rand() % 11);
StopX += 5 - (rand() % 11);
StopY += 5 - (rand() % 11);
rValue = GetRValue(MyPenColor) + 5 - (rand() % 11);
gValue = GetGValue(MyPenColor) + 5 - (rand() % 11);
bValue = GetBValue(MyPenColor) + 5 - (rand() % 11);
MyPenColor = RGB(rValue, gValue, bValue);
rValue = GetRValue(MyBrushColor) + 5 - (rand() % 11);
gValue = GetGValue(MyBrushColor) + 5 - (rand() % 11);
bValue = GetBValue(MyBrushColor) + 5 - (rand() % 11);
MyBrushColor = RGB(rValue, gValue, bValue);
DeleteObject(MyPen);
DeleteObject(MyBrush);
MyPen = CreatePen(PS_SOLID, 3, MyPenColor);
MyBrush = CreateSolidBrush(MyBrushColor);
InvalidateRect(hwnd, NULL, FALSE);
}
//Obs³uga komunikatu WM_LBUTTONDOWN, czyli naciœniêcia lewego przycisku myszy
void OnLButtonDown(HWND hwnd, int x, int y, WPARAM wParam)
{
StartX = x;
StartY = y;
}
//Obs³uga komunikatu WM_LBUTTONUP, czyli zwolnienia lewego przycisku myszy
void OnLButtonUp(HWND hwnd, int x, int y, WPARAM wParam)
{
StopX = x;
StopY = y;
InvalidateRect(hwnd, NULL, TRUE);
}
//Obs³uga komunikatu WM_MOUSEMOVE, czyli poruszenia kursorem myszy
void OnMouseMove(HWND hwnd, int x, int y, WPARAM wParam)
{
if(wParam & MK_LBUTTON)
{
StopX = x;
StopY = y;
InvalidateRect(hwnd, NULL, TRUE);
}
}
//Obs³uga komunikatu WM_PAINT - tutaj rysujemy i wykonujemy inne operacje graficzne
void OnPaint(HWND hwnd, HDC hdc)
{
HPEN oldPen;
HBRUSH oldBrush;
oldPen = (HPEN)SelectObject(hdc, MyPen);
oldBrush = (HBRUSH)SelectObject(hdc, MyBrush);
Ellipse(hdc, StartX, StartY, StopX, StopY);
SelectObject(hdc, oldPen);
SelectObject(hdc, oldBrush);
}
//Obs³uga komunikatu WM_DESTROY wysy³anego do aplikacji w czasie niszczenia okna (przed zamkniêciem naszego programu)
void OnDestroy(HWND hwnd)
{
KillTimer(hwnd, 1);
DeleteObject(MyPen);
DeleteObject(MyBrush);
}
i jesli sie go uruchomi (zaznaczam iz to code::blocks) widac malowanie elips gdziekolwiek sie kliknie, natomiast mam tak zmodyfikowac ten kod aby elipsa malowana byla w taki sam sposob lecz od srodka okna... tzn ze rowniez moge zmieniac ciagle jej wyglad klikajac gdzie mi sie podoba :P lecz ma ona lezec ciagle na srodku okna. Byłbym niezmiernie szczesliwy za pomoc
PS: W załaczniku przedstawiam jak to ma w koncowym efekcie wygladac :)