Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.22 KB | None | 0 0
  1. #include <windows.h>// підключення бібліотеки з функціями API
  2. #include<string>
  3. #include <ctime>
  4. #include <math.h>
  5. // Глобальні змінні:
  6. HINSTANCE hInst; //Дескриптор програми
  7. LPCTSTR szWindowClass = "QWERTY";
  8. LPCTSTR szTitle = "Title";
  9. static std::string str;
  10. // Попередній опис функцій
  11. COLORREF arr[10][10];
  12. ATOM MyRegisterClass(HINSTANCE hInstance);
  13. BOOL InitInstance(HINSTANCE, int);
  14. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  15. // Основна програма
  16. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
  17. int nCmdShow)
  18. {
  19. srand(time(NULL));
  20. MSG msg;
  21. // Реєстрація класу вікна
  22. MyRegisterClass(hInstance);
  23. // Створення вікна програми
  24. if (!InitInstance(hInstance, nCmdShow))
  25. {
  26. return FALSE;
  27. }
  28. // Цикл обробки повідомлень
  29. while (GetMessage(&msg, NULL, 0, 0))
  30. {
  31. TranslateMessage(&msg);
  32. DispatchMessage(&msg);
  33. }
  34. return msg.wParam;
  35. }
  36. ATOM MyRegisterClass(HINSTANCE hInstance)
  37. {
  38. WNDCLASSEX wcex;
  39. wcex.cbSize = sizeof(WNDCLASSEX);
  40. wcex.style = CS_HREDRAW | CS_VREDRAW; //стиль вікна
  41. wcex.lpfnWndProc = (WNDPROC)WndProc; //віконна процедура
  42. wcex.cbClsExtra = 0;
  43. wcex.cbWndExtra = 0;
  44. wcex.hInstance = hInstance; //дескриптор програми
  45. wcex.hIcon = LoadIcon(NULL, IDI_HAND); //визначення іконки
  46. wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //визначення курсору
  47. wcex.hbrBackground = GetSysColorBrush(COLOR_WINDOW + 1); //установка фону
  48. wcex.lpszMenuName = NULL; //визначення меню
  49. wcex.lpszClassName = szWindowClass; //ім’я класу
  50. wcex.hIconSm = NULL;
  51. return RegisterClassEx(&wcex); //реєстрація класу вікна
  52. }
  53. // FUNCTION: InitInstance (HANDLE, int)
  54. // Створює вікно програми і зберігає дескриптор програми в змінній hInst
  55. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  56. {
  57. HWND hWnd;
  58. hInst = hInstance; //зберігає дескриптор додатка в змінній hInst
  59. hWnd = CreateWindow(szWindowClass, // ім’я класу вікна
  60. szTitle, // назва програми
  61. WS_OVERLAPPEDWINDOW, // стиль вікна
  62. 0, // положення по Х
  63. 0, // положення по Y
  64. 580, // розмір по Х
  65. 540, // розмір по Y
  66. NULL, // дескриптор батьківського вікна
  67. NULL, // дескриптор меню вікна
  68. hInstance, // дескриптор програми
  69. NULL); // параметри створення.
  70. if (!hWnd) //Якщо вікно не творилось, функція повертає FALSE
  71. {
  72. return FALSE;
  73. }
  74. ShowWindow(hWnd, nCmdShow); //Показати вікно
  75. UpdateWindow(hWnd); //Оновити вікно
  76. return TRUE;
  77. }
  78. // FUNCTION: WndProc (HWND, unsigned, WORD, LONG)
  79. // Віконна процедура. Приймає і обробляє всі повідомлення, що приходять в додаток
  80. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  81. {
  82. PAINTSTRUCT ps;
  83. HDC hdc;
  84. static unsigned int index, xMouse, yMouse;
  85. switch (message)
  86. {
  87. case WM_CREATE: //Повідомлення приходить при створенні вік-на
  88. char textbuff[100];
  89. for (int i = 0; i < 10; i++)
  90. for (int j = 0; j < 10; j++)
  91. arr[i][j] = RGB(rand() % 255, rand() % 255, rand() % 255);
  92. break;
  93.  
  94. case WM_MOUSEMOVE:
  95. xMouse = LOWORD(lParam);
  96. yMouse = HIWORD(lParam);
  97. hdc = GetDC(hWnd);
  98. TextOut(hdc, 505, 10, textbuff, wsprintf(textbuff, "Х = %5d", xMouse));
  99. TextOut(hdc, 505, 30, textbuff, wsprintf(textbuff, "Y = %5d", yMouse));
  100. ReleaseDC(hWnd, hdc);
  101. break;
  102.  
  103. case WM_LBUTTONDOWN:
  104. xMouse = LOWORD(lParam);
  105. yMouse = HIWORD(lParam);
  106. if (xMouse <= 500)
  107. {
  108. int x, y;
  109. x = xMouse / 50;
  110. y = yMouse / 50;
  111.  
  112. hdc = GetDC(hWnd);
  113. TextOut(hdc, 505, 10, textbuff, wsprintf(textbuff, "Х = %5d", xMouse));
  114. TextOut(hdc, 505, 30, textbuff, wsprintf(textbuff, "Y = %5d", yMouse));
  115. ReleaseDC(hWnd, hdc);
  116.  
  117. int tempX, tempY, temp;
  118. tempX = x * 50 + 25;
  119. tempY = y * 50 + 25;
  120. temp = sqrt(pow(abs(tempX - (int)xMouse), 2) + pow(abs(tempY - (int)yMouse), 2));
  121.  
  122. if (temp < 25)
  123. {
  124. arr[x][y] = RGB(rand() % 255, rand() % 255, rand() % 255);
  125. InvalidateRect(hWnd, NULL, FALSE);
  126. }
  127. }
  128. break;
  129.  
  130. case WM_PAINT:
  131. hdc = BeginPaint(hWnd, &ps);
  132. HPEN hPen;
  133. HBRUSH hB;
  134. hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
  135. hB = CreateSolidBrush(RGB(0, 0, 255));
  136. SelectObject(hdc, hPen);
  137. int xLeft, yTop, xRight, yBottom, xStart, yStart;
  138. int xS, xE, yS, yE;
  139. xS = 0;
  140. xE = 50;
  141. for (int i = 0; i < 10; i++)//прямоугольники, которые квадраты
  142. {
  143. yS = 0;
  144. yE = 55;
  145. for (int k = 0; k < 10; k++)
  146. {
  147. hPen = CreatePen(PS_SOLID, 1, RGB(0 + i * 25, 0, 255 - i * 25));
  148. hB = CreateSolidBrush(RGB(255 - i * 25, 0, 0 + i * 25));
  149. SelectObject(hdc, hPen);
  150. SelectObject(hdc, hB);
  151. Rectangle(hdc, xS, yS, xE, yE);
  152. DeleteObject(hB);
  153. DeleteObject(hPen);
  154. yS += 50;
  155. yE += 50;
  156. }
  157. xS += 50;
  158. xE += 50;
  159. DeleteObject(hB);
  160. }
  161. xLeft = 0;
  162. xRight = 50;
  163. for (int i = 0; i < 10; i++) //Рисуем окружности
  164. {
  165. yTop = 0;
  166. yBottom = 50;
  167. for (int k = 0; k < 10; k++)
  168. {
  169. xStart = (xLeft + xRight) / 2;
  170. yStart = yTop;
  171. hB = CreateSolidBrush(arr[i][k]);
  172. SelectObject(hdc, hB);
  173. Ellipse(hdc, xLeft, yTop, xRight, yBottom);
  174. DeleteObject(hB);
  175. yTop += 50;
  176. yBottom += 50;
  177. }
  178. xLeft += 50;
  179. xRight += 50;
  180. }
  181. DeleteObject(hB);
  182. DeleteObject(hPen);
  183. EndPaint(hWnd, &ps);
  184. break;
  185.  
  186.  
  187.  
  188.  
  189.  
  190. case WM_DESTROY: //Завершення роботи
  191. PostQuitMessage(0);
  192. break;
  193. default:
  194. //Обробка повідомлень, які не оброблені користувачем
  195. return DefWindowProc(hWnd, message, wParam, lParam);
  196. }
  197. return 0;
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement