Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <math.h>
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- //Процедура рисования линии
- BOOL Line(HDC hdc, int x1, int y1, int x2, int y2);
- int i, xView, yView;
- double y;
- char Buf[2];
- const double graphKoef = 1.25;
- int WINAPI WinMain(HINSTANCE hlnstance, HINSTANCE hPrevlnstance, LPSTR lpszCmdLine, int nCmdShow) {
- HWND hWnd;
- MSG lpMsg;
- WNDCLASS w;
- w.lpszClassName = "Name Prog";
- w.hInstance = hlnstance;
- w.lpfnWndProc = WndProc;
- w.hCursor = LoadCursor(NULL, IDC_ARROW);
- w.hIcon = 0;
- w.lpszMenuName = 0;
- w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
- w.style = CS_HREDRAW | CS_VREDRAW;
- w.cbClsExtra = 0;
- w.cbWndExtra = 0;
- //Если не удалось зарегистрировать класс окна - выходим
- if (!RegisterClass(&w))
- return 0;
- //Создадим окно в памяти, заполнив аргументы CreateWindow
- hWnd = CreateWindow("Name Prog", "Graph fun", WS_OVERLAPPEDWINDOW, 100, 100, 500, 400, (HWND)NULL, (HMENU)NULL, (HINSTANCE)hlnstance, (HINSTANCE)NULL);
- //Выводим окно из памяти на экран
- ShowWindow(hWnd, nCmdShow);
- //Обновим содержимое окна
- UpdateWindow(hWnd);
- //Цикл обработки сообщений
- while (GetMessage(&lpMsg,NULL,0,0)) //Получаем сообщения
- {
- TranslateMessage(&lpMsg); //Преобразует сообщения клавиш в символы
- DispatchMessage(&lpMsg); //Передаёт сообщения соответствующей функциии окна
- }
- return (lpMsg.wParam);
- }
- //Функция окна
- LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam) {
- HDC hdc;//создаём контекст устройства
- PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
- HPEN hPen; //создаём перо
- //Цикл обработки сообщений
- switch (messg)
- {
- case WM_SIZE:
- xView = LOWORD(lParam);
- yView = HIWORD(lParam);
- break;
- //сообщение рисования
- case WM_PAINT:
- hdc = BeginPaint(hWnd, &ps);
- SetMapMode(hdc, MM_ISOTROPIC);//логические единицы отображаем, как физические
- SetWindowExtEx(hdc, 500, 500, NULL);//Длина осей
- SetViewportExtEx(hdc, xView, yView, NULL);//Опеределяем область вывода
- SetViewportOrgEx(hdc, xView / 6, yView / 2, NULL);//Начало координат
- //Рисуем оси координат
- Line(hdc, 0, 220, 0, -220);//Ось У
- Line(hdc, -100, 0, 500, 0);//Ось х
- MoveToEx(hdc, 0, 0, NULL);//перемещаем в начало координат
- for (int i = -100; i < 450; i++)
- {
- if (i >=-3 && i <= 3)
- {
- y = i / 3;
- hPen = CreatePen(1, 4, RGB(255, 25, 0));
- SelectObject(hdc, hPen);
- LineTo(hdc, i, (int)y);
- }
- else if (i < -3)
- {
- y = log10(pow(i,2) + 1);
- hPen = CreatePen(1, 4, RGB(0, 219, 255));
- SelectObject(hdc, hPen);
- LineTo(hdc, i, (int)y);
- }
- else {
- y = sqrt(pow(i, 3) - 2);
- hPen = CreatePen(1, 4, RGB(127, 0, 255));
- SelectObject(hdc, hPen);
- LineTo(hdc, i, (int)y);
- }
- }
- hPen = CreatePen(1, 1, RGB(0, 0, 0));
- SelectObject(hdc, hPen);
- //наносим деления
- for (int i = -100; i < 500; i+=100)
- {
- Line(hdc, i, 3, i, -3);
- Line(hdc, -3, i, 3, i);
- wsprintf(Buf, "%d", i);
- TextOut(hdc,i,-5,Buf,strlen(Buf));
- TextOut(hdc,-5,i,Buf,strlen(Buf));
- }
- ValidateRect(hWnd, NULL); //обновляем экран
- EndPaint(hWnd, &ps);
- break;
- //сообщение выхода - разрушение окна
- case WM_DESTROY:
- //DeleteObject(hPen);//уничтожаем перья
- PostQuitMessage(0);//выход с кодом 0
- break;
- default:
- return (DefWindowProc(hWnd, messg, wParam, lParam)); //освобождаем очередь приложения от нераспознаных
- }
- return 0;
- }
- //Функция рисования линии
- BOOL Line(HDC hdc, int x1, int y1, int x2, int y2) {
- MoveToEx(hdc,x1,y1,NULL);//сделать текущии координаты х1 у1
- return LineTo(hdc, x2, y2);//нарисовать линию
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement