Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>// підключення бібліотеки з функціями API
- #include<string>
- #include <ctime>
- #include <math.h>
- // Глобальні змінні:
- HINSTANCE hInst; //Дескриптор програми
- LPCTSTR szWindowClass = "QWERTY";
- LPCTSTR szTitle = "Title";
- static std::string str;
- // Попередній опис функцій
- COLORREF arr[10][10];
- ATOM MyRegisterClass(HINSTANCE hInstance);
- BOOL InitInstance(HINSTANCE, int);
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- // Основна програма
- int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
- int nCmdShow)
- {
- srand(time(NULL));
- MSG msg;
- // Реєстрація класу вікна
- MyRegisterClass(hInstance);
- // Створення вікна програми
- if (!InitInstance(hInstance, nCmdShow))
- {
- return FALSE;
- }
- // Цикл обробки повідомлень
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
- ATOM MyRegisterClass(HINSTANCE hInstance)
- {
- WNDCLASSEX wcex;
- wcex.cbSize = sizeof(WNDCLASSEX);
- wcex.style = CS_HREDRAW | CS_VREDRAW; //стиль вікна
- wcex.lpfnWndProc = (WNDPROC)WndProc; //віконна процедура
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance; //дескриптор програми
- wcex.hIcon = LoadIcon(NULL, IDI_HAND); //визначення іконки
- wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //визначення курсору
- wcex.hbrBackground = GetSysColorBrush(COLOR_WINDOW + 1); //установка фону
- wcex.lpszMenuName = NULL; //визначення меню
- wcex.lpszClassName = szWindowClass; //ім’я класу
- wcex.hIconSm = NULL;
- return RegisterClassEx(&wcex); //реєстрація класу вікна
- }
- // FUNCTION: InitInstance (HANDLE, int)
- // Створює вікно програми і зберігає дескриптор програми в змінній hInst
- BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
- {
- HWND hWnd;
- hInst = hInstance; //зберігає дескриптор додатка в змінній hInst
- hWnd = CreateWindow(szWindowClass, // ім’я класу вікна
- szTitle, // назва програми
- WS_OVERLAPPEDWINDOW, // стиль вікна
- 0, // положення по Х
- 0, // положення по Y
- 580, // розмір по Х
- 540, // розмір по Y
- NULL, // дескриптор батьківського вікна
- NULL, // дескриптор меню вікна
- hInstance, // дескриптор програми
- NULL); // параметри створення.
- if (!hWnd) //Якщо вікно не творилось, функція повертає FALSE
- {
- return FALSE;
- }
- ShowWindow(hWnd, nCmdShow); //Показати вікно
- UpdateWindow(hWnd); //Оновити вікно
- return TRUE;
- }
- // FUNCTION: WndProc (HWND, unsigned, WORD, LONG)
- // Віконна процедура. Приймає і обробляє всі повідомлення, що приходять в додаток
- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT ps;
- HDC hdc;
- static unsigned int index, xMouse, yMouse;
- switch (message)
- {
- case WM_CREATE: //Повідомлення приходить при створенні вік-на
- char textbuff[100];
- for (int i = 0; i < 10; i++)
- for (int j = 0; j < 10; j++)
- arr[i][j] = RGB(rand() % 255, rand() % 255, rand() % 255);
- break;
- case WM_MOUSEMOVE:
- xMouse = LOWORD(lParam);
- yMouse = HIWORD(lParam);
- hdc = GetDC(hWnd);
- TextOut(hdc, 505, 10, textbuff, wsprintf(textbuff, "Х = %5d", xMouse));
- TextOut(hdc, 505, 30, textbuff, wsprintf(textbuff, "Y = %5d", yMouse));
- ReleaseDC(hWnd, hdc);
- break;
- case WM_LBUTTONDOWN:
- xMouse = LOWORD(lParam);
- yMouse = HIWORD(lParam);
- if (xMouse <= 500)
- {
- int x, y;
- x = xMouse / 50;
- y = yMouse / 50;
- hdc = GetDC(hWnd);
- TextOut(hdc, 505, 10, textbuff, wsprintf(textbuff, "Х = %5d", xMouse));
- TextOut(hdc, 505, 30, textbuff, wsprintf(textbuff, "Y = %5d", yMouse));
- ReleaseDC(hWnd, hdc);
- int tempX, tempY, temp;
- tempX = x * 50 + 25;
- tempY = y * 50 + 25;
- temp = sqrt(pow(abs(tempX - (int)xMouse), 2) + pow(abs(tempY - (int)yMouse), 2));
- if (temp < 25)
- {
- arr[x][y] = RGB(rand() % 255, rand() % 255, rand() % 255);
- InvalidateRect(hWnd, NULL, FALSE);
- }
- }
- break;
- case WM_PAINT:
- hdc = BeginPaint(hWnd, &ps);
- HPEN hPen;
- HBRUSH hB;
- hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
- hB = CreateSolidBrush(RGB(0, 0, 255));
- SelectObject(hdc, hPen);
- int xLeft, yTop, xRight, yBottom, xStart, yStart;
- int xS, xE, yS, yE;
- xS = 0;
- xE = 50;
- for (int i = 0; i < 10; i++)//прямоугольники, которые квадраты
- {
- yS = 0;
- yE = 55;
- for (int k = 0; k < 10; k++)
- {
- hPen = CreatePen(PS_SOLID, 1, RGB(0 + i * 25, 0, 255 - i * 25));
- hB = CreateSolidBrush(RGB(255 - i * 25, 0, 0 + i * 25));
- SelectObject(hdc, hPen);
- SelectObject(hdc, hB);
- Rectangle(hdc, xS, yS, xE, yE);
- DeleteObject(hB);
- DeleteObject(hPen);
- yS += 50;
- yE += 50;
- }
- xS += 50;
- xE += 50;
- DeleteObject(hB);
- }
- xLeft = 0;
- xRight = 50;
- for (int i = 0; i < 10; i++) //Рисуем окружности
- {
- yTop = 0;
- yBottom = 50;
- for (int k = 0; k < 10; k++)
- {
- xStart = (xLeft + xRight) / 2;
- yStart = yTop;
- hB = CreateSolidBrush(arr[i][k]);
- SelectObject(hdc, hB);
- Ellipse(hdc, xLeft, yTop, xRight, yBottom);
- DeleteObject(hB);
- yTop += 50;
- yBottom += 50;
- }
- xLeft += 50;
- xRight += 50;
- }
- DeleteObject(hB);
- DeleteObject(hPen);
- EndPaint(hWnd, &ps);
- break;
- case WM_DESTROY: //Завершення роботи
- PostQuitMessage(0);
- break;
- default:
- //Обробка повідомлень, які не оброблені користувачем
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement