Создание пользовательских интерфейсов средствами MFC

Слайд 2

Создание проекта. Шаг 1

Создание проекта. Шаг 1

Слайд 3

Создание проекта

В простейшем случае программа, написанная с помощью библиотеки MFC,
содержит два

Создание проекта В простейшем случае программа, написанная с помощью библиотеки MFC, содержит
класса, порождаемые от классов иерархии
библиотеки: класс, предназначенный для создания приложения, и
класс, предназначенный для создания окна.
class CTestGraphApp : public CWinApp
{

};
class CTestGraphDlg : public CDialog
{
};

Слайд 4

Создание проекта. Шаг 2

Создание проекта. Шаг 2

Слайд 5

Создание проекта. Шаг 3

Помещаем на диалог элемент, в котором будет рисоваться график

Создание проекта. Шаг 3 Помещаем на диалог элемент, в котором будет рисоваться
(н-р Static Text)
В окне свойств задаем ему уникальный ID IDC_GRAPH
Добавляем в класс IDC_GRAPH переменную типа CStatic m_DrawArea;
Связываем переменную m_DrawArea и элемент IDC_GRAPH:
DDX_Control(pDX, IDC_GRAPH, m_DrawArea);
в методе DoDataExchange

Слайд 7

Создание проекта. Шаг 4

Создание проекта. Шаг 4

Слайд 8

Создание проекта. Шаг 5

Добавляем на диалоговое окно кнопку, при нажатии на которую

Создание проекта. Шаг 5 Добавляем на диалоговое окно кнопку, при нажатии на
будет присходить отрисовка графика
Двойным щечком по кнопке создаем соответствующий метод

Слайд 9

Контекст устройств

Графический ввод-вывод в Windows унифицирован для работы с различными физическими устройствами.

Контекст устройств Графический ввод-вывод в Windows унифицирован для работы с различными физическими
Для этого предусмотрен специальный объект, называемый контекстом устройства (Device context). Рисование на некотором абстрактном DC. Если DC связать с окном на экране, то рисование будет в происходить в окне; если связать его с принтером – то на принтере; если с файлом – то, соответственно, в файл.
Класс CClientDC – разновидность контекстов устройств; позволяет выводить графику в рабочей области окна.
Для рисования в некоторой функции (н-р, обработчике события нажатия кнопки), нужно получить контекст устройства. Это делается так: CClientDC dc(this);

Слайд 10

Отрисовка графика


void CGraphDlg::OnBnClickedDraw()
{
// TODO: добавьте свой код обработчика уведомлений
//Создаем контекст, в котором

Отрисовка графика void CGraphDlg::OnBnClickedDraw() { // TODO: добавьте свой код обработчика уведомлений
будем рисовать
CClientDC dc(&m_DrawArea);
//Узнаем размеры прямоугольника
CRect rc; //Графический объект
m_DrawArea.GetClientRect(&rc);
int w = rc.Width();
int h = rc.Height();
int x_start = 10;
int y_start = h-10;

Слайд 11

//Отрисовка …
CPen pnPenBlack(PS_SOLID,1,RGB(0,0,0)); //Графический //объект. Устанавливаем гр. объект в контекст устройства
CPen *

//Отрисовка … CPen pnPenBlack(PS_SOLID,1,RGB(0,0,0)); //Графический //объект. Устанавливаем гр. объект в контекст устройства
pOldPen = dc.SelectObject(&pnPenBlack);
dc.FillSolidRect(rc,RGB(255,255,255));
dc.MoveTo(x_start - 5,y_start);
dc.LineTo(x_start + w-15, y_start);
dc.MoveTo(x_start,y_start+5);
dc.LineTo(x_start, y_start-h+15);
CPen pnPenRed(PS_SOLID,1,RGB(255,0,0));
dc.SelectObject(&pnPenRed);
dc.MoveTo(x_start, y_start);
for(int i = 3; i < w-x_start-2; i+=3)
{
dc.LineTo(x_start + i, y_start - int(h/3*(1 - sin((float)i))));
}
dc.SelectObject(pOldPen);
}