SHARE
TWEET

Untitled

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