Guest User

Untitled

a guest
Nov 29th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.95 KB | None | 0 0
  1. #include <windows.h> // підключення бібліотеки з функціями API
  2.  
  3. // Глобальні змінні:
  4. HINSTANCE hInst; //Дескриптор програми
  5. LPCTSTR szWindowClass = "Hrechmak and Hunko";
  6. LPCTSTR szTitle = "ТРЕТЯ ПРОГРАМА";
  7. int save_i;
  8. bool counter = false;
  9. HBRUSH hbrush[5] = { CreateSolidBrush(RGB(255, 0, 0)), CreateSolidBrush(RGB(0, 255, 0)), CreateSolidBrush(RGB(0, 0, 255)), CreateSolidBrush(RGB(255, 0, 255)), CreateSolidBrush(RGB(0, 255, 255)) };
  10. HPEN hpen[5] = { CreatePen(PS_SOLID, 2, RGB(255, 0, 0)), CreatePen(PS_SOLID, 2, RGB(0, 255, 0)), CreatePen(PS_SOLID, 2, RGB(0, 0, 255)), CreatePen(PS_SOLID, 2, RGB(255, 0, 255)), CreatePen(PS_SOLID, 2, RGB(0, 255, 255)) };
  11. HRGN hrgn[100];
  12.  
  13. // Попередній опис функцій
  14.  
  15. ATOM MyRegisterClass(HINSTANCE hInstance);
  16. BOOL InitInstance(HINSTANCE, int);
  17. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  18. // Основна програма
  19. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
  20. int nCmdShow)
  21. {
  22. MSG msg;
  23.  
  24. // Реєстрація класу вікна
  25. MyRegisterClass(hInstance);
  26.  
  27. // Створення вікна програми
  28. if (!InitInstance(hInstance, nCmdShow))
  29. {
  30. return FALSE;
  31. }
  32. // Цикл обробки повідомлень
  33. while (GetMessage(&msg, NULL, 0, 0))
  34. {
  35. TranslateMessage(&msg);
  36. DispatchMessage(&msg);
  37. }
  38. return msg.wParam;
  39. }
  40.  
  41. ATOM MyRegisterClass(HINSTANCE hInstance)
  42. {
  43. WNDCLASSEX wcex;
  44. wcex.cbSize = sizeof(WNDCLASSEX);
  45. wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; //стиль вікна
  46. wcex.lpfnWndProc = (WNDPROC)WndProc; //віконна процедура
  47. wcex.cbClsExtra = 0;
  48. wcex.cbWndExtra = 0;
  49. wcex.hInstance = hInstance; //дескриптор програми
  50. wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); //визначення іконки
  51. wcex.hCursor = LoadCursor(NULL, IDC_SIZE); //визначення курсору
  52. wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //установка фону
  53. wcex.lpszMenuName = NULL; //визначення меню
  54. wcex.lpszClassName = szWindowClass; //ім’я класу
  55. wcex.hIconSm = NULL;
  56.  
  57. return RegisterClassEx(&wcex); //реєстрація класу вікна
  58. }
  59.  
  60. // FUNCTION: InitInstance (HANDLE, int)
  61. // Створює вікно програми і зберігає дескриптор програми в змінній hInst
  62.  
  63. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  64. {
  65. HWND hWnd;
  66. hInst = hInstance; //зберігає дескриптор додатка в змінній hInst
  67. hWnd = CreateWindow(szWindowClass, // ім’я класу вікна
  68. szTitle, // назва програми
  69. //WS_OVERLAPPEDWINDOW,
  70. WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZEBOX, //| WS_THICKFRAME, // стиль вікна
  71. 50, // положення по Х
  72. 90, // положення по Y
  73. 616, // розмір по Х
  74. 640, // розмір по Y
  75. NULL, // дескриптор батьківського вікна
  76. NULL, // дескриптор меню вікна
  77. hInstance, // дескриптор програми
  78. NULL); // параметри створення.
  79.  
  80. if (!hWnd) //Якщо вікно не творилось, функція повертає FALSE
  81. {
  82. return FALSE;
  83. }
  84. ShowWindow(hWnd, SW_SHOWNA); //Показати вікно
  85. UpdateWindow(hWnd); //Оновити вікно
  86. return TRUE;
  87. }
  88.  
  89. HBRUSH gradientBrush(int i) {
  90. HBRUSH hbrushtest = CreateSolidBrush(RGB(0, 0, 0));
  91. if (i == 0) {
  92. hbrushtest = CreateSolidBrush(RGB(255, 0, 0));
  93. }
  94. else if (i == 1) {
  95. hbrushtest = CreateSolidBrush(RGB(255, 127, 0));
  96. }
  97. else if (i == 2) {
  98. hbrushtest = CreateSolidBrush(RGB(255, 255, 0));
  99. }
  100. else if (i == 3) {
  101. hbrushtest = CreateSolidBrush(RGB(127, 255, 0));
  102. }
  103. else if (i == 4) {
  104. hbrushtest = CreateSolidBrush(RGB(0, 255, 0));
  105. }
  106. else if (i == 5) {
  107. hbrushtest = CreateSolidBrush(RGB(0, 255, 63));
  108. }
  109. else if (i == 6) {
  110. hbrushtest = CreateSolidBrush(RGB(0, 255, 127));
  111. }
  112. else if (i == 7) {
  113. hbrushtest = CreateSolidBrush(RGB(0, 255, 255));
  114. }
  115. else if (i == 8) {
  116. hbrushtest = CreateSolidBrush(RGB(0, 127, 255));
  117. }
  118. else if (i == 9) {
  119. hbrushtest = CreateSolidBrush(RGB(0, 0, 255));
  120. }
  121. return hbrushtest;
  122. }
  123.  
  124. HPEN gradientPen(int i) {
  125. HPEN hpentest = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
  126. if (i == 0) {
  127. hpentest = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
  128. }
  129. else if (i == 1) {
  130. hpentest = CreatePen(PS_SOLID, 2, RGB(0, 127, 255));
  131. }
  132. else if (i == 2) {
  133. hpentest = CreatePen(PS_SOLID, 2, RGB(0, 255, 255));
  134. }
  135. else if (i == 3) {
  136. hpentest = CreatePen(PS_SOLID, 2, RGB(0, 255, 127));
  137. }
  138. else if (i == 4) {
  139. hpentest = CreatePen(PS_SOLID, 2, RGB(63, 255, 0));
  140. }
  141. else if (i == 5) {
  142. hpentest = CreatePen(PS_SOLID, 2, RGB(0, 255, 0));
  143. }
  144. else if (i == 6) {
  145. hpentest = CreatePen(PS_SOLID, 2, RGB(127, 255, 0));
  146. }
  147. else if (i == 7) {
  148. hpentest = CreatePen(PS_SOLID, 2, RGB(255, 255, 0));
  149. }
  150. else if (i == 8) {
  151. hpentest = CreatePen(PS_SOLID, 2, RGB(255, 127, 0));
  152. }
  153. else if (i == 9) {
  154. hpentest = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
  155. }
  156. return hpentest;
  157. }
  158.  
  159.  
  160. // FUNCTION: WndProc (HWND, unsigned, WORD, LONG)
  161. // Віконна процедура. Приймає і обробляє всі повідомлення, що приходять в додаток
  162. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  163. {
  164. PAINTSTRUCT ps;
  165. HDC hdc;
  166. RECT rt;
  167. POINT point;
  168. HBRUSH temp;
  169. char buff[1024];
  170. int const SIZE = 10;
  171. int i, k, j, l;
  172. int ShiftX, ShiftY;
  173. int counter_hrgn = 0;
  174. int R_coordinate = 0;
  175. int G_coordinate = 0;
  176. int B_coordinate = 0;
  177. tagLOGBRUSH coordinates_RGB = { 0, 0, 0 };
  178.  
  179. switch (message)
  180. {
  181. case WM_CREATE:
  182. break;
  183.  
  184. case WM_PAINT:
  185. hdc = BeginPaint(hWnd, &ps);
  186. GetClientRect(hWnd, &rt);
  187. ShiftX = (rt.right - rt.left) / SIZE;
  188. ShiftY = (rt.bottom - rt.top) / SIZE;
  189.  
  190. if (counter) {
  191. temp = hbrush[rand() % 4];
  192. SelectObject(hdc, temp);
  193. FillRgn(GetDC(hWnd), hrgn[save_i], temp);
  194.  
  195. GetObject(temp, 1024, &coordinates_RGB);
  196. COLORREF color = coordinates_RGB.lbColor;
  197. R_coordinate = GetRValue(color);
  198. G_coordinate = GetGValue(color);
  199. B_coordinate = GetBValue(color);
  200.  
  201. TextOut(hdc, 280, 20, buff, wsprintf(buff, ("R: %d "), R_coordinate));
  202. TextOut(hdc, 330, 20, buff, wsprintf(buff, (" G: %d "), G_coordinate));
  203. TextOut(hdc, 380, 20, buff, wsprintf(buff, (" B: %d "), B_coordinate));
  204. }
  205. else {
  206. for (i = k = 0; i < SIZE; i++, k += ShiftX) {
  207. HBRUSH hbrush2 = gradientBrush(i);
  208. HPEN hpen2 = gradientPen(i);
  209. for (j = l = 0; j < SIZE; j++, l += ShiftY) {
  210. SelectObject(hdc, hpen2);
  211. SelectObject(hdc, hbrush2);
  212. Rectangle(hdc, k, l, (k + ShiftX), (l + ShiftY));
  213. DeleteObject(hbrush);
  214. DeleteObject(hpen2);
  215. }
  216. }
  217.  
  218. for (i = k = 0; i < SIZE; i++, k += ShiftX) {
  219. for (j = l = 0; j < SIZE; j++, l += ShiftY) {
  220. SelectObject(hdc, hpen[rand() % 4]);
  221. SelectObject(hdc, hbrush[rand() % 4]);
  222. hrgn[counter_hrgn] = CreateEllipticRgn(k, l, (k + ShiftX), (l + ShiftY));
  223. DeleteObject(hbrush);
  224. Ellipse(hdc, k, l, (k + ShiftX), (l + ShiftY));
  225. FillRgn(hdc, hrgn[i], hbrush[rand() % 4]);
  226. DeleteObject(hpen);
  227. counter_hrgn++;
  228. }
  229. }
  230. }
  231.  
  232. DrawText(hdc, "Coursor: ", -1, &rt, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  233.  
  234. EndPaint(hWnd, &ps);
  235. break;
  236.  
  237. case WM_LBUTTONDOWN:
  238. point.x = LOWORD(lParam);
  239. point.y = HIWORD(lParam);
  240. for (int i = 0; i < 100; i++) {
  241. if (PtInRegion(hrgn[i], point.x, point.y)) {
  242. save_i = i;
  243. counter = true;
  244. InvalidateRect(hWnd, NULL, FALSE);
  245. }
  246. }
  247. break;
  248.  
  249. case WM_DESTROY:
  250. PostQuitMessage(0);
  251. break;
  252. default:
  253. return DefWindowProc(hWnd, message, wParam, lParam);
  254. }
  255. return 0;
  256. }
Advertisement
Add Comment
Please, Sign In to add comment