Czy jak chcę rysować elipsy, to czy muszę zapamiętywać współrzędne wszystkich punktów gdy naciśnięto mysz (lewy przycisk myszy) i wszystkich punktów gdy ją zwolniono? (Oczywiście w obszarze roboczym).
0
Napisałem program, który rysuje elipsy (wersja próbna), ale nie działa tak jak bym chciał. Po odświeżeniu widać tylko jedną elipsę. Czy może mi ktoś powiedzieć, jak zrobić, aby było je wszystkie widać?
#include <windows.h>
POINT pt[2] = {{0}};
HWND uchwytOkna = 0;
LRESULT CALLBACK ProceduraOkna(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
void RysujElipse(HWND uO, INT lewo, INT gora, INT prawo, INT dol);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
WNDCLASSEX wndclassex;
wndclassex.cbSize = sizeof (WNDCLASSEX);
wndclassex.style = CS_VREDRAW | CS_HREDRAW;
wndclassex.lpfnWndProc = ProceduraOkna;
wndclassex.cbClsExtra = 0;
wndclassex.cbWndExtra = 0;
wndclassex.hInstance = hInstance;
wndclassex.hIcon = LoadIcon(0, (LPCTSTR)IDI_APPLICATION);
wndclassex.hCursor = LoadCursor(0, (LPCTSTR)IDC_ARROW);
wndclassex.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
wndclassex.lpszMenuName = 0;
wndclassex.lpszClassName = "Standardowe Okno";
wndclassex.hIconSm = LoadIcon(0, (LPCTSTR)IDI_APPLICATION);
RegisterClassEx(&wndclassex);
uchwytOkna = CreateWindowEx(
0,
"Standardowe Okno",
"Program \"Rysowanie Elips v. 1.0\"",
WS_OVERLAPPEDWINDOW,
0, 0,
800, 500,
0,
0,
hInstance,
0);
ShowWindow(uchwytOkna, SW_NORMAL);
UpdateWindow(uchwytOkna);
MSG msg;
for (;;)
{
if (0 != GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if (msg.message == WM_QUIT) break;
}
return (int)msg.wParam;
}
LRESULT CALLBACK ProceduraOkna(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_LBUTTONDOWN:
{
pt[0].x = LOWORD(lParam);
pt[0].y = HIWORD(lParam);
}
return 0;
case WM_LBUTTONUP:
{
pt[1].x = LOWORD(lParam);
pt[1].y = HIWORD(lParam);
RysujElipse(hWnd, pt[0].x, pt[0].y, pt[1].x, pt[1].y);
}
return 0;
case WM_PAINT:
RysujElipse(hWnd, pt[0].x, pt[0].y, pt[1].x, pt[1].y);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
void RysujElipse(HWND uO, INT lewo, INT gora, INT prawo, INT dol)
{
HDC hdc = 0;
hdc = GetDC(uO);
Ellipse(hdc, lewo, gora, prawo, dol);
ReleaseDC(uO, hdc);
ValidateRect(uO, 0);
}
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.