Witam
Mam problem, chce aby dla przykładu obracał się kwadrat wokół współrzędnej 400,400, o to co napisałem(w WinApi):
#include <windows.h>
#include <sstream>
#include <cmath>
LPCWSTR MainClassName = TEXT("MainClass");//nazwa klasy
LPCWSTR MainWindowName = TEXT("WndName");//nazwa okna
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);//obsługa komunikatów
bool RejestracjaKlasyOkna(const HINSTANCE hinst);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG Msg;
HWND hwnd;
if(!RejestracjaKlasyOkna(hInstance))
{
MessageBox(NULL, L"Błąd rejestracji klasy okna", L"Błąd", MB_ICONSTOP);
return 1;
}
hwnd = CreateWindowEx(0,MainClassName,MainWindowName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return 0;
}
bool RejestracjaKlasyOkna(const HINSTANCE hinst)
{
WNDCLASSEX w;
w.cbSize = sizeof(WNDCLASSEX);
w.style = CS_HREDRAW|CS_VREDRAW;
w.lpfnWndProc = WndProc;
w.cbClsExtra = 0;
w.cbWndExtra = 0;
w.hInstance = hinst;
w.hIcon = LoadIcon(NULL, IDI_APPLICATION);
w.hCursor = LoadCursor(NULL, IDC_ARROW);
w.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
w.lpszMenuName = NULL;
w.lpszClassName = MainClassName;
w.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&w)) return 0;
return true;
}
POINT kw[5]={400,400, 500,400, 500,500, 400,500, 400,400};
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc=BeginPaint(hwnd,&ps);
RECT R;
GetClientRect(hwnd,&R);
SetMapMode(ps.hdc,MM_ANISOTROPIC);
SetWindowExtEx(ps.hdc,1000,1000,NULL);
SetViewportExtEx(hdc,R.right,R.bottom,NULL);
//SetViewportExtEx (hdc, R.right/2,-R.bottom/2, NULL) ;
//SetViewportOrgEx (hdc, R.right / 2, R.bottom / 2, NULL) ;
Polygon(hdc,kw,5);
HBRUSH pudelko,szyba,ob;
szyba=CreateSolidBrush(RGB(133,1,252));
pudelko=(HBRUSH)SelectObject(hdc,szyba);
Ellipse(hdc,390,390,410,410);
SelectObject(hdc,pudelko);
DeleteObject(szyba);
EndPaint(hwnd,&ps);
break;
}
case WM_LBUTTONDOWN:
{
int kat=45;
double PI=3.14;
for(int i=1;i<5;i++)
{
kw[i].x=(kw[i].x)*cos(kat*PI/180)-(kw[i].y)*sin(kat*PI/180)+400;
kw[i].y=(kw[i].x)*sin(kat*PI/180)+(kw[i].y)*cos(kat*PI/180)+400;
}
InvalidateRect(hwnd,NULL,TRUE);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default: { return DefWindowProc(hwnd,msg,wParam,lParam); }
}
return 0;
}
Co jest w tym źle.. ?
proszę o konkrety a nie o wzory, bo robię według wzorów i nic z tego nie wychodzi:)
Tylko nie przejmujcie się że to w winapi czy coś ;) chodzi mi o samo obracanie figury w okół danego punktu.