Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h> // підключення бібліотеки з функціями API
- // Глобальні змінні:
- HINSTANCE hInst; //Дескриптор програми
- LPCTSTR szWindowClass = "Hrechmak and Hunko";
- LPCTSTR szTitle = "ТРЕТЯ ПРОГРАМА";
- int save_i;
- bool counter = false;
- 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)) };
- 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)) };
- HRGN hrgn[100];
- // Попередній опис функцій
- 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)
- {
- 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 | CS_DBLCLKS; //стиль вікна
- wcex.lpfnWndProc = (WNDPROC)WndProc; //віконна процедура
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance; //дескриптор програми
- wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); //визначення іконки
- wcex.hCursor = LoadCursor(NULL, IDC_SIZE); //визначення курсору
- wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //установка фону
- 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,
- WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZEBOX, //| WS_THICKFRAME, // стиль вікна
- 50, // положення по Х
- 90, // положення по Y
- 616, // розмір по Х
- 640, // розмір по Y
- NULL, // дескриптор батьківського вікна
- NULL, // дескриптор меню вікна
- hInstance, // дескриптор програми
- NULL); // параметри створення.
- if (!hWnd) //Якщо вікно не творилось, функція повертає FALSE
- {
- return FALSE;
- }
- ShowWindow(hWnd, SW_SHOWNA); //Показати вікно
- UpdateWindow(hWnd); //Оновити вікно
- return TRUE;
- }
- HBRUSH gradientBrush(int i) {
- HBRUSH hbrushtest = CreateSolidBrush(RGB(0, 0, 0));
- if (i == 0) {
- hbrushtest = CreateSolidBrush(RGB(255, 0, 0));
- }
- else if (i == 1) {
- hbrushtest = CreateSolidBrush(RGB(255, 127, 0));
- }
- else if (i == 2) {
- hbrushtest = CreateSolidBrush(RGB(255, 255, 0));
- }
- else if (i == 3) {
- hbrushtest = CreateSolidBrush(RGB(127, 255, 0));
- }
- else if (i == 4) {
- hbrushtest = CreateSolidBrush(RGB(0, 255, 0));
- }
- else if (i == 5) {
- hbrushtest = CreateSolidBrush(RGB(0, 255, 63));
- }
- else if (i == 6) {
- hbrushtest = CreateSolidBrush(RGB(0, 255, 127));
- }
- else if (i == 7) {
- hbrushtest = CreateSolidBrush(RGB(0, 255, 255));
- }
- else if (i == 8) {
- hbrushtest = CreateSolidBrush(RGB(0, 127, 255));
- }
- else if (i == 9) {
- hbrushtest = CreateSolidBrush(RGB(0, 0, 255));
- }
- return hbrushtest;
- }
- HPEN gradientPen(int i) {
- HPEN hpentest = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
- if (i == 0) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
- }
- else if (i == 1) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(0, 127, 255));
- }
- else if (i == 2) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(0, 255, 255));
- }
- else if (i == 3) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(0, 255, 127));
- }
- else if (i == 4) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(63, 255, 0));
- }
- else if (i == 5) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(0, 255, 0));
- }
- else if (i == 6) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(127, 255, 0));
- }
- else if (i == 7) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(255, 255, 0));
- }
- else if (i == 8) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(255, 127, 0));
- }
- else if (i == 9) {
- hpentest = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
- }
- return hpentest;
- }
- // FUNCTION: WndProc (HWND, unsigned, WORD, LONG)
- // Віконна процедура. Приймає і обробляє всі повідомлення, що приходять в додаток
- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT ps;
- HDC hdc;
- RECT rt;
- POINT point;
- HBRUSH temp;
- char buff[1024];
- int const SIZE = 10;
- int i, k, j, l;
- int ShiftX, ShiftY;
- int counter_hrgn = 0;
- int R_coordinate = 0;
- int G_coordinate = 0;
- int B_coordinate = 0;
- tagLOGBRUSH coordinates_RGB = { 0, 0, 0 };
- switch (message)
- {
- case WM_CREATE:
- break;
- case WM_PAINT:
- hdc = BeginPaint(hWnd, &ps);
- GetClientRect(hWnd, &rt);
- ShiftX = (rt.right - rt.left) / SIZE;
- ShiftY = (rt.bottom - rt.top) / SIZE;
- if (counter) {
- temp = hbrush[rand() % 4];
- SelectObject(hdc, temp);
- FillRgn(GetDC(hWnd), hrgn[save_i], temp);
- GetObject(temp, 1024, &coordinates_RGB);
- COLORREF color = coordinates_RGB.lbColor;
- R_coordinate = GetRValue(color);
- G_coordinate = GetGValue(color);
- B_coordinate = GetBValue(color);
- TextOut(hdc, 280, 20, buff, wsprintf(buff, ("R: %d "), R_coordinate));
- TextOut(hdc, 330, 20, buff, wsprintf(buff, (" G: %d "), G_coordinate));
- TextOut(hdc, 380, 20, buff, wsprintf(buff, (" B: %d "), B_coordinate));
- }
- else {
- for (i = k = 0; i < SIZE; i++, k += ShiftX) {
- HBRUSH hbrush2 = gradientBrush(i);
- HPEN hpen2 = gradientPen(i);
- for (j = l = 0; j < SIZE; j++, l += ShiftY) {
- SelectObject(hdc, hpen2);
- SelectObject(hdc, hbrush2);
- Rectangle(hdc, k, l, (k + ShiftX), (l + ShiftY));
- DeleteObject(hbrush);
- DeleteObject(hpen2);
- }
- }
- for (i = k = 0; i < SIZE; i++, k += ShiftX) {
- for (j = l = 0; j < SIZE; j++, l += ShiftY) {
- SelectObject(hdc, hpen[rand() % 4]);
- SelectObject(hdc, hbrush[rand() % 4]);
- hrgn[counter_hrgn] = CreateEllipticRgn(k, l, (k + ShiftX), (l + ShiftY));
- DeleteObject(hbrush);
- Ellipse(hdc, k, l, (k + ShiftX), (l + ShiftY));
- FillRgn(hdc, hrgn[i], hbrush[rand() % 4]);
- DeleteObject(hpen);
- counter_hrgn++;
- }
- }
- }
- DrawText(hdc, "Coursor: ", -1, &rt, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
- EndPaint(hWnd, &ps);
- break;
- case WM_LBUTTONDOWN:
- point.x = LOWORD(lParam);
- point.y = HIWORD(lParam);
- for (int i = 0; i < 100; i++) {
- if (PtInRegion(hrgn[i], point.x, point.y)) {
- save_i = i;
- counter = true;
- InvalidateRect(hWnd, NULL, FALSE);
- }
- }
- 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