Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement