Developer от Бога

DV

четверг, 6 июля 2017 г.

WinAPI. Фон для вывода Графиков функций.

Файл paintfone.h рисует псевдо окно на котором будут изображены графики функций. Белый фон представляет собой обычные линии заданой длинны выведены в цикле функцией paint_fon(), создавая обычный прямоугольник. meredian() рисует оси. тут есть важный момент, так как в нем не две прямые размещенные перпендикулярно, а четыре, которые лучами расходятся от центра в разные стороны. Сделано было для того чтоб легче перемещать график в разные стороны манипулируя всего лишь одной главной точкой. scale_div() рисует шкалу деления графика:


  1. #ifndef PAINTFONE_H_INCLUDED
  2. #define PAINTFONE_H_INCLUDED
  3. void paint_fon(HWND hwnd){
  4. HDC hDC = GetDC (hwnd);
  5. HPEN hPen = CreatePen (PS_SOLID, 5, RGB(255, 255, 255));
  6. SelectObject (hDC, hPen);
  7. for(int i=0; i<500; i++)
  8. {MoveToEx(hDC, 20, 20+i, NULL);
  9. LineTo(hDC, 560, 20+i);}
  10. DeleteObject (hPen);
  11. ReleaseDC (hwnd, hDC);}
  12. //.....................SCALE DIVISION...........................
  13. void scale_div(HWND hwnd, int x_center, int y_center, int zoom){
  14. HDC hDC = GetDC (hwnd);
  15. HRGN hrgn = CreateRectRgn(20,20,560,520);
  16. SelectClipRgn(hDC, hrgn);
  17. {
  18. for(int i=0; i<1000; i++)
  19. {MoveToEx(hDC, x_center+zoom+(i*zoom), y_center-3, NULL);
  20. LineTo(hDC, x_center+zoom+(i*zoom),y_center+3);}
  21. for(int i=0; i<1000; i++)
  22. {MoveToEx(hDC, x_center-(zoom+(i*zoom)), y_center-3, NULL);
  23. LineTo(hDC, x_center-(zoom+(i*zoom)),y_center+3);}}
  24. {
  25. for(int i=0; i<1000; i++)
  26. {MoveToEx(hDC, x_center-3, y_center-(zoom+(i*zoom)), NULL);
  27. LineTo(hDC, x_center+3,y_center-(zoom+(i*zoom)));}
  28. for(int i=0; i<1000; i++)
  29. {MoveToEx(hDC, x_center-3, y_center+(zoom+(i*zoom)), NULL);
  30. LineTo(hDC, x_center+3,y_center+(zoom+(i*zoom)));}
  31. }}
  32. //....................MEREDIAN..........................
  33. void meredian(HWND hwnd, int x_center, int y_center, int zoom){
  34. HDC hDC = GetDC (hwnd);
  35. HPEN hPen = CreatePen (PS_SOLID, 1, RGB(0, 0, 0));
  36. SelectObject (hDC, hPen);
  37. HRGN hrgn = CreateRectRgn(20,20,560,520);
  38. SelectClipRgn(hDC, hrgn);
  39. {MoveToEx(hDC, x_center, y_center, NULL);
  40. LineTo(hDC, x_center, 20);
  41. MoveToEx(hDC, x_center, y_center, NULL);
  42. LineTo(hDC, x_center, 520);}
  43. {
  44. MoveToEx(hDC, x_center, y_center, NULL);
  45. LineTo(hDC, 20, y_center);
  46. MoveToEx(hDC, x_center, y_center, NULL);
  47. LineTo(hDC, 560, y_center);}
  48. SelectObject(hDC, hPen);
  49. DeleteObject (hPen);
  50. ReleaseDC (hwnd, hDC);
  51. scale_div(hwnd,x_center,y_center,zoom);
  52. }
  53. void mousepaint(HWND hwnd, POINT point){
  54. HDC hdc = GetDC(hwnd);
  55. HPEN hPen = CreatePen (PS_SOLID, 10, RGB(0, 0, 0));
  56. SelectObject (hdc, hPen);
  57. MoveToEx(hdc, point.x, point.y, NULL);
  58. LineTo(hdc,point.x-5, point.y-5);
  59. DeleteObject (hPen);
  60. hPen = CreatePen (PS_SOLID, 10, RGB(255, 0, 0));
  61. SelectObject (hdc, hPen);
  62. MoveToEx(hdc, point.x, point.y, NULL);
  63. LineTo(hdc,point.x+5, point.y+5);
  64. //printf("%d",GetPixel(hdc,point.x+15,point.y));
  65. }
  66. #endif // PAINTFONE_H_INCLUDED

Комментариев нет:

Отправить комментарий