Advertisement
Temprory

Untitled

Dec 1st, 2019
1,294
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Windows.h>
  2. #include <math.h>
  3.  
  4. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  5. //Процедура рисования линии
  6. BOOL Line(HDC hdc, int x1, int y1, int x2, int y2);
  7.  
  8. int i, xView, yView;
  9. double y;
  10. char Buf[2];
  11.  
  12. const double graphKoef = 1.25;
  13.  
  14. int WINAPI WinMain(HINSTANCE hlnstance, HINSTANCE hPrevlnstance, LPSTR lpszCmdLine, int nCmdShow) {
  15.    
  16.     HWND hWnd;
  17.     MSG lpMsg;
  18.     WNDCLASS w;
  19.  
  20.     w.lpszClassName = "Name Prog";
  21.     w.hInstance = hlnstance;
  22.     w.lpfnWndProc = WndProc;
  23.     w.hCursor = LoadCursor(NULL, IDC_ARROW);
  24.     w.hIcon = 0;
  25.     w.lpszMenuName = 0;
  26.     w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  27.     w.style = CS_HREDRAW | CS_VREDRAW;
  28.     w.cbClsExtra = 0;
  29.     w.cbWndExtra = 0;
  30.      
  31.     //Если не удалось зарегистрировать класс окна - выходим
  32.     if (!RegisterClass(&w))
  33.         return 0;
  34.     //Создадим окно в памяти, заполнив аргументы CreateWindow
  35.     hWnd = CreateWindow("Name Prog", "Graph fun", WS_OVERLAPPEDWINDOW, 100, 100, 500, 400, (HWND)NULL, (HMENU)NULL, (HINSTANCE)hlnstance, (HINSTANCE)NULL);
  36.  
  37.     //Выводим окно из памяти на экран
  38.     ShowWindow(hWnd, nCmdShow);
  39.     //Обновим содержимое окна
  40.     UpdateWindow(hWnd);
  41.  
  42.     //Цикл обработки сообщений
  43.  
  44.     while (GetMessage(&lpMsg,NULL,0,0))  //Получаем сообщения
  45.     {
  46.         TranslateMessage(&lpMsg);  //Преобразует сообщения клавиш в символы
  47.         DispatchMessage(&lpMsg);   //Передаёт сообщения соответствующей функциии окна
  48.     }
  49.     return (lpMsg.wParam);
  50. }
  51.  
  52. //Функция окна
  53. LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam) {
  54.  
  55.     HDC hdc;//создаём контекст устройства
  56.     PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
  57.     HPEN hPen; //создаём перо
  58.     //Цикл обработки сообщений
  59.    
  60.     switch (messg)
  61.     {
  62.         case WM_SIZE:
  63.  
  64.             xView = LOWORD(lParam);
  65.             yView = HIWORD(lParam);
  66.  
  67.         break;
  68.         //сообщение рисования
  69.         case WM_PAINT:
  70.  
  71.             hdc = BeginPaint(hWnd, &ps);
  72.             SetMapMode(hdc, MM_ISOTROPIC);//логические единицы отображаем, как физические
  73.             SetWindowExtEx(hdc, 500, 500, NULL);//Длина осей
  74.             SetViewportExtEx(hdc, xView, yView, NULL);//Опеределяем область вывода
  75.             SetViewportOrgEx(hdc, xView / 6, yView / 2, NULL);//Начало координат
  76.            
  77.             //Рисуем оси координат
  78.             Line(hdc, 0, 220, 0, -220);//Ось У
  79.             Line(hdc, -100, 0, 500, 0);//Ось х
  80.             MoveToEx(hdc, 0, 0, NULL);//перемещаем в начало координат
  81.        
  82.            
  83.             for (int i = -100; i < 450; i++)
  84.             {
  85.                 if (i >=-3 && i <= 3)
  86.                 {
  87.                     y = i / 3;
  88.                     hPen = CreatePen(1, 4, RGB(255, 25, 0));
  89.                     SelectObject(hdc, hPen);
  90.                     LineTo(hdc, i, (int)y);
  91.                 }
  92.                 else if (i < -3)
  93.                 {
  94.                     y = log10(pow(i,2) + 1);
  95.                     hPen = CreatePen(1, 4, RGB(0, 219, 255));
  96.                     SelectObject(hdc, hPen);
  97.                     LineTo(hdc, i, (int)y);
  98.                 }
  99.                 else {
  100.                     y = sqrt(pow(i, 3) - 2);
  101.                     hPen = CreatePen(1, 4, RGB(127, 0, 255));
  102.                     SelectObject(hdc, hPen);
  103.                     LineTo(hdc, i, (int)y);
  104.                 }
  105.             }
  106.            
  107.             hPen = CreatePen(1, 1, RGB(0, 0, 0));
  108.             SelectObject(hdc, hPen);
  109.        
  110.             //наносим деления
  111.             for (int i = -100; i < 500; i+=100)
  112.             {
  113.                 Line(hdc, i, 3, i, -3);
  114.                 Line(hdc, -3, i, 3, i);
  115.                 wsprintf(Buf, "%d", i);
  116.                 TextOut(hdc,i,-5,Buf,strlen(Buf));
  117.                 TextOut(hdc,-5,i,Buf,strlen(Buf));
  118.             }
  119.  
  120.             ValidateRect(hWnd, NULL); //обновляем экран
  121.             EndPaint(hWnd, &ps);
  122.             break;
  123.  
  124.             //сообщение выхода - разрушение окна
  125.         case WM_DESTROY:
  126.             //DeleteObject(hPen);//уничтожаем перья
  127.             PostQuitMessage(0);//выход с кодом 0
  128.             break;
  129.         default:
  130.         return (DefWindowProc(hWnd, messg, wParam, lParam)); //освобождаем очередь приложения от нераспознаных
  131.     }
  132.     return 0;
  133. }
  134.  
  135. //Функция рисования линии
  136. BOOL Line(HDC hdc, int x1, int y1, int x2, int y2) {
  137.    
  138.     MoveToEx(hdc,x1,y1,NULL);//сделать текущии координаты х1 у1
  139.     return LineTo(hdc, x2, y2);//нарисовать линию
  140. }
Advertisement
RAW Paste Data Copied
Advertisement