![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Графические операции в MFC
Графические операции в MFC представляют собой методы класса CDC и его производных классов. Рассмотрим примеры построения графических примитивов. Вывод строки: void CMainWnd:: OnPaint() { CPaintDC dc(this); dc.TextOut(200, 200, " TextOut Samples"); //Координаты x, y начала вывода текста и сам текст } Вывод точки: void CMainWnd:: OnPaint() { CPaintDC dc(this); dc.SetPixel(500, 200, RGB(255, 0, 0)); //Координаты x, y точки и ее цвет, соответствующий //палитре RGB } Рисование дуги окружности: void CMainWnd:: OnPaint() { CPaintDC dc(this); dc.Arc(200, 200, 100, 100, 400, 400, 10, 10); //dc.Arc(x1, y1, x2, y2, x3, y3, x4, y4), где //x1, y1, x2, y2 – координа ты прямоугольника, //в который вписывается эллипс, //x3, y3 – начальная точка, //x4, y4 – конечная точка прямой линии, //отсекающей от эллипса дугу, //дуга чертится против часовой стрелки //от точки x3, y3 до точки x4, y4. } Замкнутая дуга: void CMainWnd:: OnPaint() { CPaintDC dc(this); dc.Chord(250, 250, 100, 100, 400, 400, 10, 10); //Рисует сегмент эллипса, параметры //аналогичны параметрам функции Arc() } Эллипс: void CMainWnd:: OnPaint() { CPaintDC dc(this); dc.Ellipse(450, 450, 50, 150); //Параметры функции //Ellipse() – координаты точек x1, y1 и //x2, y2, задающих прямоугольник, //в который вписывается эллипс } Прямая линия: void CMainWnd:: OnPaint() { CPaintDC dc(this); dc.MoveTo(200, 200); //Установка курсора в //заданную точку окна с //координатами x1, y1 dc.LineTo(100, 100); //Рисование линии //от текущей позиции курсора //до заданной точки с координатами x2, y2 } Ломаная линия: void CMainWnd:: OnPaint() { CPaintDC dc(this); int n=5; //Количество точек ломаной линии CPoint pt[5]; //Массив координат точек ломаной pt[0].x=30; pt[0].y=70; pt[1].x=480; pt[1].y=90; pt[2].x=120; pt[2].y=40; pt[3].x=190; pt[3].y=60; pt[4].x=250; pt[4].y=200; dc.Polyline(pt, n); //Рисование ломаной линии //Если координаты первой и последней //точки совпадают, ломаная получается //замкнутой, иначе – разомкнутой } Многоугольник: void CMainWnd:: OnPaint() { CPaintDC dc(this); int n=5; //Количество вершин многоугольника CPoint pt[5]; //Массив координат вершин //многоугольника pt[0].x=30; pt[0].y=70; pt[1].x=480; pt[1].y=90; pt[2].x=120; pt[2].y=40; pt[3].x=190; pt[3].y=60; pt[4].x=250; pt[4].y=200; dc.Polygon(pt, n); //Рисование многоугольника // – все точки массива соединяются прямыми //линиями, включая последнюю и первую точки } Рассмотрим программу, которая осуществляет вывод квадрата в середину диалоговой панели (рис. 21.7). В зависимости от выбранных радиокнопок изменяются размеры квадрата. Перерисовка изображения происходит сразу после выбора новой радиокнопки. Рис. 21.7. Вывод квадрата в диалоговое окно Для создания программы необходимо выполнить следующие шаги. 1. Создайте в среде Visual C++ приложение, использующее библиотеку MFC – MFC AppWizard(exe); вариант приложения – Dialog Based, название – Graphmfc1. 2. Отредактируйте диалоговую панель: · в свойствах диалоговой панели установите язык диалоговой панели – русский; · удалите кнопку Cancel; · измените текст и положение статической строки: в свойство Caption элемента введите текст «Рисование квадрата»; · добавитьте элемент управления Group и отредактируйте его подпись: в свойство Caption элемента введите текст «Коэффициент»; · внутри элемента Group разместите три радиокнопки – элементы Radio Button. Настройте свойства 1-й радиокнопки: установите флажок Group; · внутри элемента Group разместите три статических строки и введите в них подписи к радиокнопкам, обозначающие коэффициент, определяющий размеры квадрта, – «х1», «х2», «х3». 3. Добавьте в программу переменную m_Size, связанную с радиокнопками (категория value, тип int). 4. Инициализируйте радиокнопки – выберите при открытии диалоговой панели первую радиокнопку; для этого в функции OnInitDialog() диалоговой панели после строки //TODO Add extra initialization here добавьте код: //TODO: Add extra initialization here m_Size=0;
|