ColorLine=0; ColorGrid=0;
. . . .
}
Вызываем окно выбора цвета в функции обработки события:
// функция обработки щелчка по пункту меню Цвет линии
void CGraphDlg::OnColorLine()
{
CColorDialog ColDlg; // объявление экземпляра класса CColorDialog
// DoModal - открывает окно выбора цвета
if(ColDlg.DoModal()==IDOK) // если при закрытии окна пользователь нажал кнопку ОК
{
ColorLine = ColDlg.GetColor(); // запоминаем цвет, выбранный пользователем
SendMessage(WM_PAINT); // команда родительскому окну перерисовать окно
}
}
Аналогичным образом осуществляется процедура выбора цвета сетки.
В настоящем проекте значения констант A, B, C, D заданной функции предполагается изменять в отдельном диалоговом окне, которое вызывается с помощью соответствующего пункта меню. Создаем это окно следующим образом:
Ø В меню Insert выбираем New Form
Ø В диалоговом окне New Form в поле Name указываем имя CONST, нажимаем ОК
Ø Для нового ресурса IDD_CONST_DIALOG создаем новый класс CConstDlg
Ø Создаем ресурс типа BitMap с именем IDB_FORMUL содержащий растровое изображение заданной функции
Ø Добавляем в форму элемент управления типа Picture.
Ø В окне свойств этого элемента управления в поле Type выбираем BitMap, в поле Image - IDB_FORMUL
Ø Добавляем в форму 4 надписи и 4 текстовых поля, которым даем имена IDC_A, IDC_B, IDC_C, IDC_D.
Создаем переменные, ассоциируемые с текстовыми полями
Ø В контекстном меню диалогового окна IDC_CONST_DIALOG выбираем Class Wizard
Ø В диалоговом окне Class Wizard на вкладке Member Variables с помощью кнопки Add Variable создаем переменные a, b, c, d категории Value, типа float ассоциированные c тестовыми полями IDC_A, IDC_B, IDC_C, IDC_D.
Мы должны открыть диалоговое окно констант заданной функции, которые установил пользователь, и применить его к графическим объектам. Поскольку инициализация констант заданной функции и их использование предполагается осуществлять с помощью функций одного класса CGraphDlg, то целесообразно включить заголовочный файл ConstDlg.h в файл GraphDlg.h и объявить екземпляр класса CConstDlg в файле GraphDlg.h:
#include "ConstDlg.h"
. . .
class CGraphDlg : public CDialog
{
public:
CConstDlg ConsDlg;
. . .
}
Создаем функцию обработки щелчка по пункту меню Константы
void CGraphDlg::OnConst()
{
if(ConsDlg.DoModal()==IDOK) // если при закрытии окна пользователь нажал кнопку ОК
SendMessage(WM_PAINT); // посылаем команду родительскому окну перерисовать окно
}
В диалоговом окне CGridGlg создаем функцию обработки щелчка по кнопке ОК
void CGridGlg::OnOK()
{
float buf;
//считывание данных из всех элементов управления в ассоциированные переменные
UpdateData(true);
// Если нижняя граница больше верхней, то границы меняются местами
if(Xmin>Xmax){ buf=Xmin; Xmin=Xmax; Xmax=buf; }
if(Ymin>Ymax){ buf=Ymin; Ymin=Ymax; Ymax=buf; }
// вычисление границ, кратных шагу сетки
Xmin=Round(Xmin,Hx); Xmax=Round(Xmax,Hx);
Ymin=Round(Ymin,Hy); Ymax=Round(Ymax,Hy);
// Диапазон переменной не менее двух шагов
if(Xmax-Xmin<2*Hx) Xmax=Xmin+2*Hx;
if(Ymax-Ymin<2*Hy) Ymax=Ymin+2*Hy;
// Диапазон переменной не более двенадцати шагов
if(Xmax-Xmin>12*Hx) Xmax=Xmin+12*Hx;
if(Ymax-Ymin>12*Hy) Ymax=Ymin+12*Hy;
//считывание данных из всех ассоциированных переменных в элементы управления
UpdateData(false);
CDialog::OnOK();
}
Создаем функцию DrawGrid в классе CgraphDlg для рисования сетки
void CGraphDlg::DrawGrid()
{
CRect rec; // параметры клиентской области
GetClientRect(&rec); // получение параметров клиентской области
int Nx,Ny; // количество интервалов сетки по X и Y
Nx=(int)((GridGlg.Xmax-GridGlg.Xmin)/GridGlg.Hx);
Ny=(int)((GridGlg.Ymax-GridGlg.Ymin)/GridGlg.Hy);
float Sx,Sy; // расстояние между линиями сетки в форме по X и Y
Sx=(rec.right -2*D)/(float)Nx;
Sy=(rec.bottom-2*D)/(float)Ny;
// объявление экземпляра класса CClientDC для работы с клиентской областью окна
// связывает его с контекстом устройства (device context) текущего диалогового окна
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.