Томский государственный университет систем управления и радиоэлектроники
Опубликован: 01.11.2012 | Доступ: свободный | Студентов: 651 / 76 | Длительность: 06:01:00
Тема: Программирование
Специальности: Системный архитектор, Тестировщик
Теги:
Лекция 7:
Графические средства
MainWndProc
Подпрограмма Draw
subroutine Draw(hdc) use ifwina integer hdc integer HGREEN_BRUSH, HBLUE_BRUSH integer HPEN, HOLD_PEN, HOLD_BRUSH, ires HBLUE_BRUSH = CreateSolidBrush(RGB(0,0,255)) ! создание HGREEN_BRUSH = CreateSolidBrush(RGB(0,255,0)) HPEN=CreatePen(PS_SOLID,10,RGB(230,60,150)) HOLD_PEN = SelectObject(hdc,HPEN) ! сохранение HOLD_BRUSH = SelectObject(hdc,HGREEN_BRUSH) ires = Rectangle(hdc,100,200,400,300) ires = SelectObject(hdc,HOLD_PEN) ! восстановление ires = SelectObject(hdc,hBLUE_BRUSH) ires = Ellipse(hdc,150,150,250,250) ires = SelectObject(hdc,HOLD_BRUSH) ires = DeleteObject(HPEN) ires = DeleteObject(HBLUE_BRUSH) ires = DeleteObject(HGREEN_BRUSH) end subroutine Draw
Console Application
program DrawToMetaFile use ifwina integer hEMF, hBRUSH, hPEN, ires hEMF = CreateEnhMetaFile (0,"D:\\pic.emf"C,null_rect,"А"C) hBRUSH = CreateSolidBrush(RGB(0,255,0)) hPEN = CreatePen (PS_DASH,4,Rgb(255,0,0)) ires = SelectObject(hEMF, hBRUSH) ires = SelectObject(hEMF, hPEN) ires = Rectangle(hEMF,100,100,300,300) ires = CloseEnhMetaFile(hEMF) ires = DeleteObject(HPEN) ires = DeleteObject(HBRUSH) end
Задание
Рисование треугольника Серпинского.
Построить главный треугольник.
Найти середины сторон.
Сообщить трем треугольникам-потомкам, проделать выше-сказанное. (рекурсивный вызов)
Вариант программы
!****************************************************************** ! Рисование треугольника Серпинского в метафайл !****************************************************************** program FRACTAL use ifwina implicit none integer hEMF, hPEN, ires hEMF = CreateEnhMetaFile (0,"D:\\Serpinsky.emf"C,null_rect,""C) ! --- создание метафайла, пера hPEN = CreatePen (PS_SOLID,1,Rgb(0,0,255)) ires = SelectObject(hEMF, hPEN) call Serpinsky(hEMF, 50, 200, 150, 50, 250, 200, 5) ! --- вызов рекурсивной подпрограммы рисования ires=CloseEnhMetaFile(hEMF) ires=DeleteObject(HPEN) contains recursive subroutine Serpinsky(hc,x1,y1,x2,y2,x3,y3,N) integer hc ! дескриптор метафайла integer x1,y1,x2,y2,x3,y3 ! координаты треугольника integer N ! число поколений integer xc1, yc1, xc2, yc2, xc3, yc3 ! координаты середин сторон integer ires if (N==0) return ! остановка рекурсии ires=MoveToEx(hc, x1, y1, NULL) ires=LineTo(hc, x2, y2) ires=LineTo(hc, x3, y3) ires=LineTo(hc, x1, y1) xc1=(x1+x3)/2; yc1=(y1+y3)/2 xc2=(x1+x2)/2; yc2=(y1+y2)/2 xc3=(x2+x3)/2; yc3=(y2+y3)/2 call Serpinsky(hc,x1,y1,xc2,yc2,xc1,yc1,N-1) call Serpinsky(hc,xc2,yc2,x2,y2,xc3,yc3,N-1) call Serpinsky(hc,xc1,yc1,xc3,yc3,x3,y3,N-1) end subroutine Serpinsky end