Advertisement
Temprory

Untitled

Dec 7th, 2019
1,773
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Windows.h>
  2. #include <tchar.h>
  3. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  4. TCHAR WinName[] = _T("MainFrame");
  5. int APIENTRY _tWinMain(HINSTANCE This, //Дескриптор текущего приложения
  6.     HINSTANCE Prev, // В современных системах всегда 0
  7.     LPTSTR cmd,     // Командная строка
  8.     int mode)       // Режим отображения окна
  9. {
  10.     HWND hWnd;   // Дескриптор текущего приложения
  11.     MSG msg;     // Структура для хранения сообщения
  12.     WNDCLASS wc; // Класс окна
  13.     // Определение класса окна
  14.     wc.hInstance = This;
  15.     wc.lpszClassName = WinName;                 // Имя класса окна
  16.     wc.lpfnWndProc = WndProc;                   // Функция окна
  17.     wc.style = CS_HREDRAW | CS_VREDRAW;         // Стиль окна
  18.     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // Стандартная икона
  19.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);   // Стандартный курсор
  20.     wc.lpszMenuName = NULL;  // Нет меню
  21.     wc.cbClsExtra = 0;       // Нет дополнительных данных класса
  22.     wc.cbWndExtra = 0;       // Нет дополнительных данных окна
  23.     // Заполнение окна белым цветом
  24.     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  25.     if (!RegisterClass(&wc)) return 0;   // Регистрация класса окна
  26.     // Создание окна
  27.     hWnd = CreateWindow(WinName,         // Имя класса окна
  28.         _T("Защита 2 лабы Win32 Api"), // Заголовок окна
  29.         WS_OVERLAPPEDWINDOW,             // Стиль окна
  30.         CW_USEDEFAULT,                   // x
  31.         CW_USEDEFAULT,                   // y Размеры окна
  32.         CW_USEDEFAULT,                   // Width
  33.         CW_USEDEFAULT,                   // Height
  34.         HWND_DESKTOP,                    // Дискриптор родительского окна
  35.         NULL,                            // Нет меню
  36.         This,                            // Дескриптор приложения
  37.         NULL);                           // Дополнительной информации нет
  38.     ShowWindow(hWnd, mode); // Показать окно
  39.     // Цикл обработки сообщений
  40.     while (GetMessage(&msg, NULL, 0, 0))
  41.     {
  42.         TranslateMessage(&msg); // Функция трансляции кодов нажатой клавиши
  43.         DispatchMessage(&msg);  // Посылает сообщение функции WndProc()
  44.     }
  45.     return 0;
  46. }
  47. // Оконная функция вызывается операционной системой
  48. // и получает сообщения из очереди для данного приложения
  49. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  50. { // Обработчик сообщений
  51.     HDC hdc;
  52.     PAINTSTRUCT ps;
  53.     static int radiusX = 100;
  54.     static int radiusY = 100;
  55.     static int wWidth, wHeight;
  56.     static int percentsForDrawing;
  57.     static HPEN ecllipse;
  58.     switch (message)
  59.     {
  60.     case WM_CREATE: // Созадём таймер
  61.         SetTimer(hWnd, 1, 100, NULL); // 100 mill
  62.  
  63.     case WM_SIZE:
  64.        
  65.         wWidth = LOWORD(lParam);
  66.         wHeight = HIWORD(lParam);
  67.         break;
  68.  
  69.     case WM_TIMER:
  70.         if (percentsForDrawing != 100)
  71.         {
  72.             percentsForDrawing++;
  73.             InvalidateRect(hWnd, NULL, TRUE);
  74.         }
  75.         else
  76.  
  77.             KillTimer(hWnd, 1);
  78.        
  79.         break;
  80.    
  81.     case WM_PAINT:
  82.        
  83.         hdc = BeginPaint(hWnd, &ps);
  84.         SetMapMode(hdc, MM_LOMETRIC);  // установка режима (одна логич. ед. = 0,1 мм)
  85.         SetViewportOrgEx(hdc, wWidth / 2, wHeight / 2, NULL); // Определяем новое начало системы координат
  86.         // Рисуем круг
  87.         for (int currentY = radiusY; currentY < wHeight; currentY += 10) // +1мм
  88.         {
  89.             radiusY += 10;
  90.        
  91.             Ellipse(hdc, -1 * radiusX, radiusY, radiusX, -1 * radiusY);
  92.            
  93.            
  94.             if ((currentY + 10) >= wHeight)
  95.             {
  96.                 for (int  newCurrentY = currentY; newCurrentY > (-1 * wHeight); newCurrentY -=10)
  97.                 {
  98.                     radiusY -= 10;
  99.                    
  100.                     Ellipse(hdc, -1 * radiusX, radiusY, radiusX, -1 * radiusY);
  101.  
  102.                     if ((newCurrentY - 10) <= wHeight)
  103.                     {
  104.                         currentY = 100;
  105.                         break;
  106.                     }
  107.                 }
  108.             }
  109.         }
  110.         break;
  111.  
  112.     case WM_DESTROY: PostQuitMessage(0);
  113.         break; // Завершение программы
  114.     default: return DefWindowProc(hWnd, message, wParam, lParam);
  115.     }
  116.     return 0;
  117.  
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement