Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <tchar.h>
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- TCHAR WinName[] = _T("MainFrame");
- int APIENTRY _tWinMain(HINSTANCE This, //Дескриптор текущего приложения
- HINSTANCE Prev, // В современных системах всегда 0
- LPTSTR cmd, // Командная строка
- int mode) // Режим отображения окна
- {
- HWND hWnd; // Дескриптор текущего приложения
- MSG msg; // Структура для хранения сообщения
- WNDCLASS wc; // Класс окна
- // Определение класса окна
- wc.hInstance = This;
- wc.lpszClassName = WinName; // Имя класса окна
- wc.lpfnWndProc = WndProc; // Функция окна
- wc.style = CS_HREDRAW | CS_VREDRAW; // Стиль окна
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // Стандартная икона
- wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Стандартный курсор
- wc.lpszMenuName = NULL; // Нет меню
- wc.cbClsExtra = 0; // Нет дополнительных данных класса
- wc.cbWndExtra = 0; // Нет дополнительных данных окна
- // Заполнение окна белым цветом
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- if (!RegisterClass(&wc)) return 0; // Регистрация класса окна
- // Создание окна
- hWnd = CreateWindow(WinName, // Имя класса окна
- _T("Защита 2 лабы Win32 Api"), // Заголовок окна
- WS_OVERLAPPEDWINDOW, // Стиль окна
- CW_USEDEFAULT, // x
- CW_USEDEFAULT, // y Размеры окна
- CW_USEDEFAULT, // Width
- CW_USEDEFAULT, // Height
- HWND_DESKTOP, // Дискриптор родительского окна
- NULL, // Нет меню
- This, // Дескриптор приложения
- NULL); // Дополнительной информации нет
- ShowWindow(hWnd, mode); // Показать окно
- // Цикл обработки сообщений
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg); // Функция трансляции кодов нажатой клавиши
- DispatchMessage(&msg); // Посылает сообщение функции WndProc()
- }
- return 0;
- }
- // Оконная функция вызывается операционной системой
- // и получает сообщения из очереди для данного приложения
- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- { // Обработчик сообщений
- HDC hdc;
- PAINTSTRUCT ps;
- static int radiusX = 100;
- static int radiusY = 100;
- static int wWidth, wHeight;
- static int percentsForDrawing;
- static HPEN ecllipse;
- switch (message)
- {
- case WM_CREATE: // Созадём таймер
- SetTimer(hWnd, 1, 100, NULL); // 100 mill
- case WM_SIZE:
- wWidth = LOWORD(lParam);
- wHeight = HIWORD(lParam);
- break;
- case WM_TIMER:
- if (percentsForDrawing != 100)
- {
- percentsForDrawing++;
- InvalidateRect(hWnd, NULL, TRUE);
- }
- else
- KillTimer(hWnd, 1);
- break;
- case WM_PAINT:
- hdc = BeginPaint(hWnd, &ps);
- SetMapMode(hdc, MM_LOMETRIC); // установка режима (одна логич. ед. = 0,1 мм)
- SetViewportOrgEx(hdc, wWidth / 2, wHeight / 2, NULL); // Определяем новое начало системы координат
- // Рисуем круг
- for (int currentY = radiusY; currentY < wHeight; currentY += 10) // +1мм
- {
- radiusY += 10;
- Ellipse(hdc, -1 * radiusX, radiusY, radiusX, -1 * radiusY);
- if ((currentY + 10) >= wHeight)
- {
- for (int newCurrentY = currentY; newCurrentY > (-1 * wHeight); newCurrentY -=10)
- {
- radiusY -= 10;
- Ellipse(hdc, -1 * radiusX, radiusY, radiusX, -1 * radiusY);
- if ((newCurrentY - 10) <= wHeight)
- {
- currentY = 100;
- break;
- }
- }
- }
- }
- break;
- case WM_DESTROY: PostQuitMessage(0);
- break; // Завершение программы
- default: return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement