Advertisement
Guest User

Untitled

a guest
Mar 20th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <math.h>
  4. LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
  5. TCHAR WinName[] = _T("MainFrame");
  6. //------------------------------------------------
  7. int APIENTRY WinMain (HINSTANCE This, HINSTANCE Prev, LPSTR cmd, int mode)
  8. {
  9. HWND hWnd; //дескриптор главного окна программы
  10. MSG msg; //Структура для хранения сообщений
  11. WNDCLASS wc; //класс окна
  12. //Определение класса окна
  13. wc.hInstance = This;
  14. wc.lpszClassName = WinName;
  15. wc.lpfnWndProc = WndProc;
  16. wc.style = CS_HREDRAW | CS_VREDRAW;
  17. wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  18. wc.hCursor = LoadCursor(NULL, IDI_APPLICATION);
  19. wc.lpszMenuName = NULL; //Нет меняю
  20. wc.cbClsExtra = 0; //нет дополнительных данных класса
  21. wc.cbWndExtra = 0; //нет дополнительных данных окна
  22. //Заполнение окна белым цветом
  23. wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //установка цвета фона
  24. if (!RegisterClass(&wc)) return 0; //регистрация класса окна
  25. //создане окна
  26. hWnd = CreateWindow(WinName, _T("Windows-приложения"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  27. HWND_DESKTOP /*Дескриптор родительского окна*/ , NULL /*Нет меню*/, This /*дескриптор приложения*/,
  28. NULL /*Дополнительной информации нет*/);
  29. ShowWindow(hWnd, mode);
  30. //ЦИкл обработки сообщений
  31. while (GetMessage(&msg, NULL, 0, 0)) //цикл получения сообщений
  32. {
  33. TranslateMessage(&msg); //функция трансляции кодов нажатой клавиши
  34. DispatchMessage(&msg); //посылает сообщение функции wndproc()
  35. }
  36. return 0; //при положительном завершении программы в главную функцию возвращается 0
  37. }
  38. //-------------------------------------
  39. //оконная функция вызываемая операционной системой и получает сообщения из очереди для данного приложения
  40. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  41. {
  42. PAINTSTRUCT ps;
  43. HDC hdc; static int sx, sy;
  44. static HPEN hpen;
  45. int a, b, x_scr, y_scr; //Экранные координаты
  46. float x[4] = {0.0, 0.0, -0.08, 0.08},
  47. y[4] = {-0.25, 0.25, 0.0, 0.0}; //Объектные координаты стрелки
  48. float xMax = 8.5,yMax = 8.5; //Объектные координаты окна
  49. float Kx, Ky; //Коэффициенты масштабирования объектных координат в экранные
  50. float x0 = 4.5, y0 = 4.5, r = 3.0;
  51. //Обработчик сообщений
  52. switch(message)
  53. {
  54. case WM_SIZE :
  55. sx = LOWORD(lParam);
  56. sy = HIWORD(lParam);
  57. break;
  58. case WM_CREATE:
  59. hpen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
  60. break;
  61. case WM_PAINT :
  62. hdc = BeginPaint(hWnd, &ps);
  63. int i, j;
  64. float pi, phi, cos_phi, sin_phi, xx, yy;
  65. float dx, dy;
  66. pi = 4.0*atan(1.0); phi = 12*pi/180;
  67. cos_phi = cos(phi); sin_phi = sin(phi);
  68. SelectObject(hdc, hpen);
  69. Kx = sx/xMax;
  70. Ky = sy/yMax;
  71. for (j = 0; j < 4; j++) {x[j] += x0 + r; y[j] += y0;}
  72. for(i = 0; i < 30; i++)
  73. {
  74. for(j = 0; j < 4; j++)
  75. {
  76. dx = x[j] - x0; dy = y[j] - y0;
  77. x[j] = x0 + dx* cos_phi - dy * sin_phi;
  78. y[j] = y0 + dx * sin_phi + dy * cos_phi;
  79. }
  80. MoveToEx(hdc, x[0] * Kx, sy - y[0] * Ky, NULL);
  81. for(j = 1; j <= 3; j++) LineTo(hdc, x[j] * Kx, sy - y[j] * Ky);
  82. LineTo(hdc, x[1] * Kx, sy - y[1] * Ky);
  83. }
  84. EndPaint(hWnd, &ps);
  85. break;
  86. case WM_DESTROY :
  87. DeleteObject(hpen);
  88. PostQuitMessage(0);
  89. break;
  90. //Обработка сообщения по-уолчанию
  91. default : return DefWindowProc (hWnd, message, wParam, lParam);
  92. }
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement