diff --git a/L11.cpp b/L11.cpp new file mode 100644 index 0000000..7d2a680 --- /dev/null +++ b/L11.cpp @@ -0,0 +1,359 @@ +// L11.cpp : Определяет точку входа для приложения. +// + +#include "framework.h" +#include "L11.h" + +#define MAX_LOADSTRING 100 + +// Глобальные переменные: +HINSTANCE hInst; // текущий экземпляр +WCHAR szTitle[MAX_LOADSTRING]; // Текст строки заголовка +WCHAR szWindowClass[MAX_LOADSTRING]; // имя класса главного окна + +// Отправить объявления функций, включенных в этот модуль кода: +ATOM MyRegisterClass(HINSTANCE hInstance); +BOOL InitInstance(HINSTANCE, int); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); + +int APIENTRY wWinMain(_In_ HINSTANCE hInstance, + _In_opt_ HINSTANCE hPrevInstance, + _In_ LPWSTR lpCmdLine, + _In_ int nCmdShow) +{ + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + + // TODO: Разместите код здесь. + + // Инициализация глобальных строк + LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadStringW(hInstance, IDC_L11, szWindowClass, MAX_LOADSTRING); + MyRegisterClass(hInstance); + + // Выполнить инициализацию приложения: + if (!InitInstance (hInstance, nCmdShow)) + { + return FALSE; + } + + HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_L11)); + + MSG msg; + + // Цикл основного сообщения: + while (GetMessage(&msg, nullptr, 0, 0)) + { + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return (int) msg.wParam; +} + + + +// +// ФУНКЦИЯ: MyRegisterClass() +// +// ЦЕЛЬ: Регистрирует класс окна. +// +ATOM MyRegisterClass(HINSTANCE hInstance) +{ + WNDCLASSEXW wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_L11)); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_L11); + wcex.lpszClassName = szWindowClass; + wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); + + return RegisterClassExW(&wcex); +} + +// +// ФУНКЦИЯ: InitInstance(HINSTANCE, int) +// +// ЦЕЛЬ: Сохраняет маркер экземпляра и создает главное окно +// +// КОММЕНТАРИИ: +// +// В этой функции маркер экземпляра сохраняется в глобальной переменной, а также +// создается и выводится главное окно программы. +// +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + hInst = hInstance; // Сохранить маркер экземпляра в глобальной переменной + + HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); + + if (!hWnd) + { + return FALSE; + } + + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + return TRUE; +} + +// +// ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM) +// +// ЦЕЛЬ: Обрабатывает сообщения в главном окне. +// +// WM_COMMAND - обработать меню приложения +// WM_PAINT - Отрисовка главного окна +// WM_DESTROY - отправить сообщение о выходе и вернуться +// +// +void Image1(HDC hdc, int cx, int cy, COLORREF color) { + HPEN hPen = CreatePen(PS_SOLID, 2, color); + SelectObject(hdc, hPen); + + POINT p[4] = { + cx, cy - 20, + cx + 20, cy + 20, + cx - 20, cy + 20, + cx, cy - 20 + }; Polyline(hdc, p, 4); + + DeleteObject(hPen); +} +void Image2(HDC hdc, int cx, int cy, COLORREF color) { + HPEN hPen = CreatePen(PS_SOLID, 2, color); + SelectObject(hdc, hPen); + + POINT p[5] = { + cx, cy - 20, + cx + 20, cy, + cx, cy + 20, + cx - 20, cy, + cx, cy - 20 + }; Polyline(hdc, p, 5); + + DeleteObject(hPen); +} +void Image3(HDC hdc, int cx, int cy, COLORREF color) { + HPEN hPen = CreatePen(PS_SOLID, 2, color); + SelectObject(hdc, hPen); + + POINT p[5] = { + cx, cy + 10, + cx - 10, cy - 10, + cx, cy, + cx + 10, cy - 10, + cx, cy + 10 + }; + Polyline(hdc, p, 5); + DeleteObject(hPen); +} +void Image5(HDC hdc, int cx, int cy, COLORREF color) { + HPEN hPen = CreatePen(PS_SOLID, 2, color); + SelectObject(hdc, hPen); + + POINT p[6] = { + cx - 20, cy - 20, // левая верхняя точка + cx, cy + 5, // более глубокая вершина выреза + cx + 20, cy - 20, // правая верхняя точка + cx + 20, cy + 20, // правая нижняя точка + cx - 20, cy + 20, // левая нижняя точка + cx - 20, cy - 20 // замыкание фигуры + }; + Polyline(hdc, p, 6); + DeleteObject(hPen); +}; + +void Picture1LineY(HDC hdc) { + short x = 40; + short y = 40; + char i = 0; + while (i < 6) { + Image1(hdc, x, y, RGB(255, 0, 0)); + y += 50; + i++; + } +} +void Picture2LineY(HDC hdc) { + short x = 40; + short y = 40; + char i = 0; + while (i < 6) { + Image2(hdc, x, y, RGB(255, 0, 0)); + y += 50; + i++; + } +} +void Picture3LineY(HDC hdc) { + short x = 40; + short y = 40; + char i = 0; + while (i < 6) { + Image3(hdc, x, y, RGB(255, 0, 0)); + y += 50; + i++; + } +} +void Picture5LineY(HDC hdc) { + short x = 40; + short y = 40; + char i = 0; + while (i < 6) { + Image5(hdc, x, y, RGB(255, 0, 0)); + y += 50; + i++; + } +} + +enum Modes { + image1, + image1_line, + image2, + image2_line, + image3, + image3_line, + image5, + image5_line, + mode_none, +}​; +enum Modes mode = image1; +/*void Picture0(HDC hdc) { + Image0(hdc, 40, 40, RGB(255, 0, 0)); + Image0(hdc, 140, 40, RGB(255, 0, 0)); + Image0(hdc, 240, 40, RGB(255, 0, 0)); + Image0(hdc, 240, 240, RGB(255, 0, 0)); + Image0(hdc, 40, 240, RGB(255, 0, 0)); +}*/ +void Picture1(HDC hdc) { + Image1(hdc, 40, 40, RGB(255, 0, 0)); + Image1(hdc, 140, 40, RGB(255, 0, 0)); + Image1(hdc, 240, 40, RGB(255, 0, 0)); + Image1(hdc, 240, 240, RGB(255, 0, 0)); + Image1(hdc, 40, 240, RGB(255, 0, 0)); +} +void Picture2(HDC hdc) { + Image2(hdc, 40, 40, RGB(255, 0, 0)); + Image2(hdc, 140, 40, RGB(0, 255, 0)); + Image2(hdc, 240, 40, RGB(0, 0, 255)); + Image2(hdc, 240, 240, RGB(255, 255, 0)); + Image2(hdc, 40, 240, RGB(255, 0, 255)); +} +void Picture3(HDC hdc) { + Image3(hdc, 40, 40, RGB(255, 0, 0)); + Image3(hdc, 140, 40, RGB(0, 255, 0)); + Image3(hdc, 240, 40, RGB(0, 0, 255)); + Image3(hdc, 240, 240, RGB(255, 255, 0)); + Image3(hdc, 40, 240, RGB(255, 0, 255)); +} +void Picture5(HDC hdc) { + Image5(hdc, 40, 40, RGB(255, 0, 0)); + Image5(hdc, 140, 40, RGB(0, 255, 0)); + Image5(hdc, 240, 40, RGB(0, 0, 255)); + Image5(hdc, 240, 240, RGB(255, 255, 0)); + Image5(hdc, 40, 240, RGB(255, 0, 255)); +} + +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_COMMAND: + { + int wmId = LOWORD(wParam); + // Разобрать выбор в меню: + switch (wmId) + { + case IDM_ABOUT: + DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); + break; + case IDM_EXIT: + DestroyWindow(hWnd); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + } + break; + + case WM_KEYDOWN: + mode = (enum Modes)(mode + 1); + if (mode == mode_none) mode = image1; + InvalidateRect(hWnd, NULL, TRUE); + break; + + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hWnd, &ps); + switch (mode) { + case image1: + Picture1(hdc); + break; + case image1_line: + Picture1LineY(hdc); + break; + case image2: + Picture2(hdc); + break; + case image2_line: + Picture2LineY(hdc); + break; + case image3: + Picture3(hdc); + break; + case image3_line: + Picture3LineY(hdc); + break; + case image5: + Picture5(hdc); + break; + case image5_line: + Picture5LineY(hdc); + break; + }​; + EndPaint(hWnd, &ps); + }; + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + +// Обработчик сообщений для окна "О программе". +INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + switch (message) + { + case WM_INITDIALOG: + return (INT_PTR)TRUE; + + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + } + break; + } + return (INT_PTR)FALSE; +} diff --git a/L9-1.cpp b/L9-1.cpp index 616aa06..c2ad6d0 100644 --- a/L9-1.cpp +++ b/L9-1.cpp @@ -1,38 +1,13 @@ #include #include - -void print1_10() { - int a = 1; - do { - printf("%d ", a); - a += 1; - } while (a <= 10); +); } -void print10_1() { - int a = 10; - do { - printf("%d ", a); - a -= 1; - } while (a >= 1); }//commit -} -void print100_10_while() { - int a = 100; - while (a >= 10) { - printf("%d ", a); - a -= 10; - } -} -void print1000_100_while() { - int a = 1000; - while (a >= 100) { - printf("%d ", a); - a -= 100; + } -} -// +}// void print1000_25_while() { int a = 1000; while (a >= 0) {