Advertisement
ResistanceJke

lab12

Dec 12th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.51 KB | None | 0 0
  1. //Программа заполняет бинарный файл данными о фигуре
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6. #include <Windows.h>
  7.  
  8. struct zapolnimzxc
  9. {
  10.     int x, y, r, g, b;
  11.     char text[100];
  12. };
  13.  
  14. int main()
  15. {
  16.     SetConsoleCP(1251);
  17.     SetConsoleOutputCP(1251);
  18.     FILE* fout;
  19.     int n;
  20.     fopen_s(&fout, "D:\\temp\\figura.bin", "wb");
  21.     printf("Введите количество элементов: ");
  22.     scanf_s("%d", &n);
  23.     fwrite(&n, sizeof(int), 1, fout);
  24.     for (int i = 0; i < n; i++)
  25.     {
  26.         zapolnimzxc temp;
  27.         printf("\nКоординаты элемента х у");
  28.         scanf_s("%d%d", &temp.x, &temp.y);
  29.         printf("\nТекст элемента");
  30.         getchar();
  31.         gets_s(temp.text);
  32.         printf("\nЦвет текста");
  33.         scanf_s("%d%d%d", &temp.r, &temp.g, &temp.b);
  34.         fwrite(&temp, sizeof(zapolnimzxc), 1, fout);
  35.     }
  36.     fclose(fout);
  37.     return 0;
  38. }
  39. ---------------------------------------------------------------------------------------------------------------------------------------
  40. // Программа рисует название фигуры по данным, которые были в бинарном файле
  41. // lab12risovanie.cpp : Определяет точку входа для приложения.
  42. //
  43.  
  44. #include "framework.h"
  45. #include "lab12risovanie.h"
  46. #include <stdio.h> 
  47. #define MAX_LOADSTRING 100
  48. int n;
  49. struct inscript
  50. {
  51.     int x, y, r, g, b;
  52.     char text[100];
  53. };
  54. inscript* arr;
  55. // Глобальные переменные:
  56. HINSTANCE hInst;                                // текущий экземпляр
  57. WCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
  58. WCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
  59.  
  60. // Отправить объявления функций, включенных в этот модуль кода:
  61. ATOM                MyRegisterClass(HINSTANCE hInstance);
  62. BOOL                InitInstance(HINSTANCE, int);
  63. LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
  64. INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
  65.  
  66. int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
  67.                      _In_opt_ HINSTANCE hPrevInstance,
  68.                      _In_ LPWSTR    lpCmdLine,
  69.                      _In_ int       nCmdShow)
  70. {
  71.     UNREFERENCED_PARAMETER(hPrevInstance);
  72.     UNREFERENCED_PARAMETER(lpCmdLine);
  73.  
  74.     // TODO: Разместите код здесь.
  75.  
  76.     // Инициализация глобальных строк
  77.     LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  78.     LoadStringW(hInstance, IDC_LAB12RISOVANIE, szWindowClass, MAX_LOADSTRING);
  79.     MyRegisterClass(hInstance);
  80.  
  81.     // Выполнить инициализацию приложения:
  82.     if (!InitInstance (hInstance, nCmdShow))
  83.     {
  84.         return FALSE;
  85.     }
  86.  
  87.     HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_LAB12RISOVANIE));
  88.  
  89.     MSG msg;
  90.  
  91.     // Цикл основного сообщения:
  92.     while (GetMessage(&msg, nullptr, 0, 0))
  93.     {
  94.         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  95.         {
  96.             TranslateMessage(&msg);
  97.             DispatchMessage(&msg);
  98.         }
  99.     }
  100.  
  101.     return (int) msg.wParam;
  102. }
  103.  
  104.  
  105.  
  106. //
  107. //  ФУНКЦИЯ: MyRegisterClass()
  108. //
  109. //  ЦЕЛЬ: Регистрирует класс окна.
  110. //
  111. ATOM MyRegisterClass(HINSTANCE hInstance)
  112. {
  113.     WNDCLASSEXW wcex;
  114.  
  115.     wcex.cbSize = sizeof(WNDCLASSEX);
  116.  
  117.     wcex.style          = CS_HREDRAW | CS_VREDRAW;
  118.     wcex.lpfnWndProc    = WndProc;
  119.     wcex.cbClsExtra     = 0;
  120.     wcex.cbWndExtra     = 0;
  121.     wcex.hInstance      = hInstance;
  122.     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_LAB12RISOVANIE));
  123.     wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
  124.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  125.     wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_LAB12RISOVANIE);
  126.     wcex.lpszClassName  = szWindowClass;
  127.     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  128.  
  129.     return RegisterClassExW(&wcex);
  130. }
  131.  
  132. //
  133. //   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
  134. //
  135. //   ЦЕЛЬ: Сохраняет маркер экземпляра и создает главное окно
  136. //
  137. //   КОММЕНТАРИИ:
  138. //
  139. //        В этой функции маркер экземпляра сохраняется в глобальной переменной, а также
  140. //        создается и выводится главное окно программы.
  141. //
  142. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  143. {
  144.    hInst = hInstance; // Сохранить маркер экземпляра в глобальной переменной
  145.  
  146.    HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  147.       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
  148.  
  149.    if (!hWnd)
  150.    {
  151.       return FALSE;
  152.    }
  153.    FILE* fin;
  154.    fopen_s(&fin, "D:\\temp\\figura.bin", "rb");
  155.    fread(&n, sizeof(int), 1, fin);
  156.    arr = (inscript*)malloc(sizeof(inscript) * n);
  157.    for (int i = 0; i < n; i++)
  158.    {
  159.        fread(&arr[i], sizeof(inscript), 1, fin);
  160.    }
  161.    fclose(fin);
  162.    ShowWindow(hWnd, nCmdShow);
  163.    UpdateWindow(hWnd);
  164.  
  165.    return TRUE;
  166. }
  167.  
  168. //
  169. //  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
  170. //
  171. //  ЦЕЛЬ: Обрабатывает сообщения в главном окне.
  172. //
  173. //  WM_COMMAND  - обработать меню приложения
  174. //  WM_PAINT    - Отрисовка главного окна
  175. //  WM_DESTROY  - отправить сообщение о выходе и вернуться
  176. //
  177. //
  178. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  179. {
  180.     switch (message)
  181.     {
  182.     case WM_COMMAND:
  183.         {
  184.             int wmId = LOWORD(wParam);
  185.             // Разобрать выбор в меню:
  186.             switch (wmId)
  187.             {
  188.             case IDM_ABOUT:
  189.                 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  190.                 break;
  191.             case IDM_EXIT:
  192.                 DestroyWindow(hWnd);
  193.                 break;
  194.             default:
  195.                 return DefWindowProc(hWnd, message, wParam, lParam);
  196.             }
  197.         }
  198.         break;
  199.     case WM_PAINT:
  200.         {
  201.             PAINTSTRUCT ps;
  202.             HDC hdc = BeginPaint(hWnd, &ps);
  203.            
  204.             HFONT hFont = CreateFont(40, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, L"Arial");
  205.             SelectObject(hdc, hFont);
  206.             for (int i = 0; i < n; i++)
  207.             {
  208.                 TCHAR text[100];
  209.                 SetTextColor(hdc, RGB(arr[i].r, arr[i].g, arr[i].b));
  210.                 OemToChar(arr[i].text, text);
  211.                 TextOut(hdc, arr[i].x, arr[i].y, text, _tcslen(text));
  212.             }
  213.             DeleteObject(hFont);
  214.  
  215.  
  216.             EndPaint(hWnd, &ps);
  217.         }
  218.         break;
  219.     case WM_DESTROY:
  220.         PostQuitMessage(0);
  221.         break;
  222.     default:
  223.         return DefWindowProc(hWnd, message, wParam, lParam);
  224.     }
  225.     return 0;
  226. }
  227.  
  228. // Обработчик сообщений для окна "О программе".
  229. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  230. {
  231.     UNREFERENCED_PARAMETER(lParam);
  232.     switch (message)
  233.     {
  234.     case WM_INITDIALOG:
  235.         return (INT_PTR)TRUE;
  236.  
  237.     case WM_COMMAND:
  238.         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  239.         {
  240.             EndDialog(hDlg, LOWORD(wParam));
  241.             return (INT_PTR)TRUE;
  242.         }
  243.         break;
  244.     }
  245.     return (INT_PTR)FALSE;
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement