Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <tchar.h>
- #include <math.h>
- LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
- TCHAR WinName[] = _T("MainFrame");
- //------------------------------------------------
- int APIENTRY WinMain (HINSTANCE This, HINSTANCE Prev, LPSTR cmd, int mode)
- {
- HWND hWnd; //дескриптор главного окна программы
- MSG msg; //Структура для хранения сообщений
- WNDCLASS wc; //класс окна
- //Определение класса окна
- wc.hInstance = This;
- wc.lpszClassName = WinName;
- wc.lpfnWndProc = WndProc;
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wc.hCursor = LoadCursor(NULL, IDI_APPLICATION);
- wc.lpszMenuName = NULL; //Нет меняю
- wc.cbClsExtra = 0; //нет дополнительных данных класса
- wc.cbWndExtra = 0; //нет дополнительных данных окна
- //Заполнение окна белым цветом
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //установка цвета фона
- if (!RegisterClass(&wc)) return 0; //регистрация класса окна
- //создане окна
- hWnd = CreateWindow(WinName, _T("Windows-приложения"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- HWND_DESKTOP /*Дескриптор родительского окна*/ , NULL /*Нет меню*/, This /*дескриптор приложения*/,
- NULL /*Дополнительной информации нет*/);
- ShowWindow(hWnd, mode);
- //ЦИкл обработки сообщений
- while (GetMessage(&msg, NULL, 0, 0)) //цикл получения сообщений
- {
- TranslateMessage(&msg); //функция трансляции кодов нажатой клавиши
- DispatchMessage(&msg); //посылает сообщение функции wndproc()
- }
- return 0; //при положительном завершении программы в главную функцию возвращается 0
- }
- //-------------------------------------
- //оконная функция вызываемая операционной системой и получает сообщения из очереди для данного приложения
- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT ps;
- HDC hdc; static int sx, sy;
- static HPEN hpen;
- int a, b, x_scr, y_scr; //Экранные координаты
- float x[4] = {0.0, 0.0, -0.08, 0.08},
- y[4] = {-0.25, 0.25, 0.0, 0.0}; //Объектные координаты стрелки
- float xMax = 8.5,yMax = 8.5; //Объектные координаты окна
- float Kx, Ky; //Коэффициенты масштабирования объектных координат в экранные
- float x0 = 4.5, y0 = 4.5, r = 3.0;
- //Обработчик сообщений
- switch(message)
- {
- case WM_SIZE :
- sx = LOWORD(lParam);
- sy = HIWORD(lParam);
- break;
- case WM_CREATE:
- hpen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
- break;
- case WM_PAINT :
- hdc = BeginPaint(hWnd, &ps);
- int i, j;
- float pi, phi, cos_phi, sin_phi, xx, yy;
- float dx, dy;
- pi = 4.0*atan(1.0); phi = 12*pi/180;
- cos_phi = cos(phi); sin_phi = sin(phi);
- SelectObject(hdc, hpen);
- Kx = sx/xMax;
- Ky = sy/yMax;
- for (j = 0; j < 4; j++) {x[j] += x0 + r; y[j] += y0;}
- for(i = 0; i < 30; i++)
- {
- for(j = 0; j < 4; j++)
- {
- dx = x[j] - x0; dy = y[j] - y0;
- x[j] = x0 + dx* cos_phi - dy * sin_phi;
- y[j] = y0 + dx * sin_phi + dy * cos_phi;
- }
- MoveToEx(hdc, x[0] * Kx, sy - y[0] * Ky, NULL);
- for(j = 1; j <= 3; j++) LineTo(hdc, x[j] * Kx, sy - y[j] * Ky);
- LineTo(hdc, x[1] * Kx, sy - y[1] * Ky);
- }
- EndPaint(hWnd, &ps);
- break;
- case WM_DESTROY :
- DeleteObject(hpen);
- PostQuitMessage(0);
- break;
- //Обработка сообщения по-уолчанию
- default : return DefWindowProc (hWnd, message, wParam, lParam);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement