Advertisement
TheShavel63

Пример лабораторной работы

Jun 27th, 2022 (edited)
832
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.46 KB | None
  1. #include <windows.h>
  2. #include <cmath>
  3. #include <fstream>
  4. #include <iostream>
  5. #include <cstring>
  6.  
  7. using namespace std;
  8.  
  9. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  10.  
  11. TCHAR szProgName[] = TEXT("HelloWorld"); // char szProgName[] = "HelloWorld";
  12.  
  13. void Print(HWND hWnd);
  14.  
  15. int WINAPI WinMain(HINSTANCE hCurrentInst, HINSTANCE hPreviousInst, LPSTR lpszCmdLine, int nCmdShow)
  16. {
  17.     WNDCLASS wndClass;
  18.     HWND hWnd;
  19.     MSG message;
  20.  
  21.     wndClass.lpszClassName = szProgName;
  22.     wndClass.hInstance = hCurrentInst;
  23.     wndClass.lpfnWndProc = WndProc;
  24.     wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  25.     wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  26.     wndClass.lpszMenuName = 0;
  27.     wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  28.     wndClass.style = CS_HREDRAW | CS_VREDRAW;
  29.     wndClass.cbClsExtra = 0;
  30.     wndClass.cbWndExtra = 0;
  31.  
  32.     if (!RegisterClass(&wndClass))
  33.         return 0;
  34.  
  35.     hWnd = CreateWindow(
  36.         szProgName,
  37.         TEXT("Лабораторная работа №2, часть 2, Платонов, Клеймёнов"),
  38.         WS_OVERLAPPEDWINDOW,
  39.         CW_USEDEFAULT,
  40.         CW_USEDEFAULT,
  41.         CW_USEDEFAULT,
  42.         CW_USEDEFAULT,
  43.         NULL,
  44.         NULL,
  45.         hCurrentInst,
  46.         NULL
  47.     );
  48.  
  49.     ShowWindow(hWnd, nCmdShow);
  50.     UpdateWindow(hWnd);
  51.  
  52.     while (GetMessage(&message, NULL, 0, 0))
  53.     {
  54.         TranslateMessage(&message);
  55.         DispatchMessage(&message);
  56.     }
  57.  
  58.  
  59.     return message.wParam;
  60. }
  61.  
  62. LRESULT CALLBACK WndProc(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam)
  63. {
  64.     HDC hDC;
  65.     PAINTSTRUCT ps;
  66.  
  67.     int x1_0, y1_0, x2_0, y2_0, x3_0, y3_0, x4_0, y4_0; // переменные для 1 эллиптического сектора
  68.     float square_0;
  69.     int x1_1, y1_1, x2_1, y2_1, x3_1, y3_1, x4_1, y4_1; // переменные для 2 эллиптического сектора
  70.     float square_1;
  71.     int x1_2, y1_2, x2_2, y2_2, x3_2, y3_2, x4_2, y4_2; // переменные для 3 эллиптического сектора
  72.  
  73.     ifstream fin("number.txt"); // открытие файла с координатами
  74.  
  75.     // занесение координат в переменные
  76.     fin >> x1_0;
  77.     fin >> y1_0;
  78.     fin >> x2_0;
  79.     fin >> y2_0;
  80.     fin >> x3_0;
  81.     fin >> y3_0;
  82.     fin >> x4_0;
  83.     fin >> y4_0;
  84.  
  85.     fin >> x1_1;
  86.     fin >> y1_1;
  87.     fin >> x2_1;
  88.     fin >> y2_1;
  89.     fin >> x3_1;
  90.     fin >> y3_1;
  91.     fin >> x4_1;
  92.     fin >> y4_1;
  93.    
  94.     // объявление кистей
  95.     HBRUSH hBrush_0; // создание кисти 0
  96.     hBrush_0 = CreateHatchBrush(HS_FDIAGONAL, RGB(255, 0, 0));
  97.     HBRUSH hBrush_1; // создание кисти 1
  98.     hBrush_1 = CreateHatchBrush(HS_CROSS, RGB(0, 255, 0));
  99.  
  100.    
  101.     square_0 = 0.5 * (150 * y3_0 + x3_0 * y4_0 + x4_0 * 160 - x3_0 * 160 - x4_0 * y3_0 - 150 * y4_0); // вычитание площади по формуле Гаусса
  102.     square_1 = 0.5 * (150 * y3_1 + x3_1 * y4_1 + x4_1 * 160 - x3_1 * 160 - x4_1 * y3_1 - 150 * y4_1); // вычитание площади по формуле Гаусса
  103.      
  104.     if (square_0 > square_1)
  105.     {
  106.         x1_2 = x1_0;
  107.         y1_2 = y1_0;
  108.         x2_2 = x2_0;
  109.         y2_2 = y2_0;
  110.         x3_2 = x3_0;
  111.         y3_2 = y3_0;
  112.         x4_2 = x4_0;
  113.         y4_2 = y4_0;
  114.     }
  115.  
  116.     if (square_1 > square_0)
  117.     {
  118.         x1_2 = x1_1;
  119.         y1_2 = y1_1;
  120.         x2_2 = x2_1;
  121.         y2_2 = y2_1;
  122.         x3_2 = x3_1;
  123.         y3_2 = y3_1;
  124.         x4_2 = x4_1;
  125.         y4_2 = y4_1;
  126.     }
  127.  
  128.     switch (nMessage)
  129.     {
  130.     case WM_LBUTTONUP:
  131.         Print(hWnd);
  132.         break;
  133.  
  134.     case WM_PAINT:
  135.  
  136.         hDC = BeginPaint(hWnd, &ps);
  137.        
  138.         // легенда
  139.         TextOut(hDC, 300, 20, TEXT("Legend:"), 7);
  140.         SelectObject(hDC, hBrush_0); // выбор кисти
  141.         Rectangle(hDC, 300, 45, 330, 60);
  142.         TextOut(hDC, 340, 44, TEXT("1 indicator"), 11);
  143.         SelectObject(hDC, hBrush_1); // выбор кисти
  144.         Rectangle(hDC, 300, 65, 330, 80);
  145.         TextOut(hDC, 340, 64, TEXT("2 indicator"), 11);
  146.  
  147.         // рисование секторов
  148.         SelectObject(hDC, hBrush_0); // выбор кисти
  149.         Pie(hDC, x1_0+10, y1_0+10, x2_0+10, y2_0+10, x3_0+10, y3_0+10, x4_0+10, y4_0+10);
  150.         SelectObject(hDC, hBrush_1); // выбор кисти
  151.         Pie(hDC, x1_1+10, y1_1+10, x2_1+10, y2_1+10, x3_1+10, y3_1+10, x4_1+10, y4_1+10);
  152.  
  153.         Pie(hDC, x1_2 + 10, y1_2 + 200, x2_1 + 10, y2_2 + 200, x3_1 + 10, y3_2 + 200, x4_1 + 10, y4_2 + 200);
  154.  
  155.         EndPaint(hWnd, &ps);
  156.         break;
  157.  
  158.     case WM_DESTROY:
  159.         PostQuitMessage(0);
  160.         break;
  161.  
  162.     default:
  163.         return DefWindowProc(hWnd, nMessage, wParam, lParam);
  164.     }
  165.  
  166.     return 0;
  167. }
  168.  
  169. void Print(HWND hWnd)
  170. {
  171.     DOCINFO         docinfo;
  172.     PRINTDLG        pd;
  173.  
  174.     ZeroMemory(&pd, sizeof(pd));
  175.  
  176.     pd.lStructSize = sizeof(PRINTDLG);
  177.     pd.hwndOwner = hWnd;
  178.     pd.Flags = PD_RETURNDC;
  179.  
  180.     if (PrintDlg(&pd))
  181.     {
  182.         ZeroMemory(&docinfo, sizeof(docinfo));
  183.  
  184.         docinfo.cbSize = sizeof(docinfo);
  185.  
  186.         if (StartDoc(pd.hDC, &docinfo) > 0)
  187.         {
  188.             StartPage(pd.hDC);
  189.             EndPage(pd.hDC);
  190.             EndDoc(pd.hDC);
  191.         }
  192.     }
  193.  
  194.     if (pd.hDevMode)
  195.         GlobalFree(pd.hDevMode);
  196.  
  197.     if (pd.hDevNames)
  198.         GlobalFree(pd.hDevNames);
  199.  
  200.     if (pd.hDC)
  201.         DeleteDC(pd.hDC);
  202.  
  203.     return;
  204. }
Advertisement
RAW Paste Data Copied
Advertisement