Advertisement
skioe

Untitled

Oct 14th, 2021
891
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.11 KB | None | 0 0
  1. // WindowsProject1.cpp : Определяет точку входа для приложения.
  2. //
  3.  
  4. #define _USE_MATH_DEFINES
  5.  
  6. #include <cmath>
  7. #include "framework.h"
  8. #include "WindowsProject1.h"
  9. #include <math.h>
  10.  
  11. #define MAX_LOADSTRING 100
  12.  
  13.  
  14.  
  15. // Глобальные переменные:
  16. HINSTANCE hInst;                                // текущий экземпляр
  17. WCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
  18. WCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
  19.  
  20. // Отправить объявления функций, включенных в этот модуль кода:
  21. ATOM                MyRegisterClass(HINSTANCE hInstance);
  22. BOOL                InitInstance(HINSTANCE, int);
  23. LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
  24. INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
  25.  
  26. int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
  27.                      _In_opt_ HINSTANCE hPrevInstance,
  28.                      _In_ LPWSTR    lpCmdLine,
  29.                      _In_ int       nCmdShow)
  30. {
  31.     UNREFERENCED_PARAMETER(hPrevInstance);
  32.     UNREFERENCED_PARAMETER(lpCmdLine);
  33.  
  34.     // TODO: Разместите код здесь.
  35.  
  36.     // Инициализация глобальных строк
  37.     LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  38.     LoadStringW(hInstance, IDC_WINDOWSPROJECT1, szWindowClass, MAX_LOADSTRING);
  39.     MyRegisterClass(hInstance);
  40.  
  41.     // Выполнить инициализацию приложения:
  42.     if (!InitInstance (hInstance, nCmdShow))
  43.     {
  44.         return FALSE;
  45.     }
  46.  
  47.     HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT1));
  48.  
  49.     MSG msg;
  50.  
  51.     // Цикл основного сообщения:
  52.     while (GetMessage(&msg, nullptr, 0, 0))
  53.     {
  54.         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  55.         {
  56.             TranslateMessage(&msg);
  57.             DispatchMessage(&msg);
  58.         }
  59.     }
  60.  
  61.     return (int) msg.wParam;
  62. }
  63.  
  64.  
  65.  
  66. //
  67. //  ФУНКЦИЯ: MyRegisterClass()
  68. //
  69. //  ЦЕЛЬ: Регистрирует класс окна.
  70. //
  71. ATOM MyRegisterClass(HINSTANCE hInstance)
  72. {
  73.     WNDCLASSEXW wcex;
  74.  
  75.     wcex.cbSize = sizeof(WNDCLASSEX);
  76.  
  77.     wcex.style          = CS_HREDRAW | CS_VREDRAW;
  78.     wcex.lpfnWndProc    = WndProc;
  79.     wcex.cbClsExtra     = 0;
  80.     wcex.cbWndExtra     = 0;
  81.     wcex.hInstance      = hInstance;
  82.     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT1));
  83.     wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
  84.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  85.     wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT1);
  86.     wcex.lpszClassName  = szWindowClass;
  87.     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  88.  
  89.     return RegisterClassExW(&wcex);
  90. }
  91.  
  92. //
  93. //   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
  94. //
  95. //   ЦЕЛЬ: Сохраняет маркер экземпляра и создает главное окно
  96. //
  97. //   КОММЕНТАРИИ:
  98. //
  99. //        В этой функции маркер экземпляра сохраняется в глобальной переменной, а также
  100. //        создается и выводится главное окно программы.
  101. //
  102. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  103. {
  104.    hInst = hInstance; // Сохранить маркер экземпляра в глобальной переменной
  105.  
  106.    HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  107.       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
  108.  
  109.    if (!hWnd)
  110.    {
  111.       return FALSE;
  112.    }
  113.  
  114.    ShowWindow(hWnd, nCmdShow);
  115.    UpdateWindow(hWnd);
  116.  
  117.    return TRUE;
  118. }
  119.  
  120. //
  121. //  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
  122. //
  123. //  ЦЕЛЬ: Обрабатывает сообщения в главном окне.
  124. //
  125. //  WM_COMMAND  - обработать меню приложения
  126. //  WM_PAINT    - Отрисовка главного окна
  127. //  WM_DESTROY  - отправить сообщение о выходе и вернуться
  128. //
  129. //
  130.  
  131. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  132. {
  133.     PAINTSTRUCT ps;
  134.     HDC hdc;
  135.     static int sx, sy;
  136.     static HPEN hpen1, hpen2;
  137.     int a, b, x_scr, y_scr;
  138.     double x, h;
  139.  
  140.     switch (message)
  141.     {
  142.  
  143.     case WM_CREATE:
  144.  
  145.         hpen1 = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
  146.         hpen2 = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
  147.  
  148.         break;
  149.  
  150.     case WM_SIZE:
  151.  
  152.         sx = LOWORD(lParam);
  153.         sy = HIWORD(lParam);
  154.  
  155.         break;
  156.  
  157.     case WM_PAINT:
  158.  
  159.         hdc = BeginPaint(hWnd, &ps);
  160.  
  161.         a = sx / 2;
  162.         b = sy / 2;
  163.  
  164.         SelectObject(hdc, hpen1);
  165.  
  166.         MoveToEx(hdc, 0, b, NULL);
  167.         LineTo(hdc, sx, b);
  168.  
  169.         MoveToEx(hdc, a, 0, NULL);
  170.         LineTo(hdc, a, sy);
  171.  
  172.         MoveToEx(hdc, 0, b, NULL);
  173.  
  174.         SelectObject(hdc, hpen2);
  175.  
  176.         MoveToEx(hdc, 0, b - b * pow(-5.0, 2), NULL);
  177.  
  178.         h = 5.0 / a;
  179.  
  180.         for (x = -5.0, x_scr = 0; x < 5.0; x += h)
  181.         {
  182.             x_scr = (x + 5.0) * a / 5.0;
  183.             y_scr = b - b * pow(x, 2);
  184.  
  185.             LineTo(hdc, x_scr, y_scr);
  186.         }
  187.  
  188.         EndPaint(hWnd, &ps);
  189.  
  190.         break;
  191.  
  192.     case WM_DESTROY:
  193.  
  194.         DeleteObject(hpen1);
  195.         DeleteObject(hpen2);
  196.         PostQuitMessage(0);
  197.  
  198.         break;
  199.  
  200.     default: return DefWindowProc(hWnd, message, wParam, lParam);
  201.  
  202.     }
  203.  
  204.     return 0;
  205. }
  206.  
  207.  
  208.  
  209. // Обработчик сообщений для окна "О программе".
  210. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  211. {
  212.     UNREFERENCED_PARAMETER(lParam);
  213.     switch (message)
  214.     {
  215.     case WM_INITDIALOG:
  216.         return (INT_PTR)TRUE;
  217.  
  218.     case WM_COMMAND:
  219.         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  220.         {
  221.             EndDialog(hDlg, LOWORD(wParam));
  222.             return (INT_PTR)TRUE;
  223.         }
  224.         break;
  225.     }
  226.     return (INT_PTR)FALSE;
  227. }
  228.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement