- •Создание рисунка в окне приложения.
- •Создание диалогового окна.
- •Создание класса для диалогового окна.
- •Команды, которые вызываются при нажатии кнопок ok и Отмена в диалоговом окне.
- •Добавление команды “Толщина линии” в меню “Перо”. Добавление обработчика OnPenWidth для команды “Толщина линии”
- •Отображение диалогового окна.
- •Добавление стандартного диалога для выбора цвета кисти.
- •Добавление переменной в класс cDialogsView для определения дополнительной цветовой палитры стандартного диалога.
- •Сохранение результатов выбора цвета и толщины для пера и цвет кисти.
- •Самостоятельная работа
- •Добавление команды “Цветовая палитра” в меню “Перо”. Код функции команды “Цветовая палитра для кисти”.
Добавление команды “Толщина линии” в меню “Перо”. Добавление обработчика OnPenWidth для команды “Толщина линии”
Перейдите на вкладку Окно ресурсов Dialogs (Resource View) и найдите идентификатор меню IDR_MAINFRAME в строке Menu. Двойным щелчком на идентификаторе IDR_MAINFRAME вызываем редактор меню. Вместо текста Прототип для текста (Type here) вводим текст “Перо”. Вводим имя команды “Толщина линии” в меню Перо. Выполняем команду Изменить идентификаторы из контекстного меню для команды “Толщина линии”. Вводим ИД: ID_PEN_WIDTH. Окно ресурсов будет выглядеть так:
Выполните команду Свойства в контекстном меню для класса CDialogsView в Окне классов (Class View). Перейдите на вкладку События (Events). В списке идентификаторов щелкните на символе слева от идентификатора ID_PEN_WIDTH. В списке сообщений выберите COMMAND, а в комбинированном списке, расположенном справа от идентификатора, активизируйте команду <Add> OnPenWidth. После этого в файл DialogsView.h будет добавлено объявление функции-члена, а в файл DialogsView.cpp - ее определение.
Отображение диалогового окна.
Теперь запишем код в функцию OnPenWidth для вызова диалогового окна из меню:
void CDialogsView::OnPenWidth()
{
Dlg dlg;
int result = dlg.DoModal();
if(result == IDOK)
{ //Если нажата кнопка OK
CDialogsDoc* pDoc = GetDocument();// Создаем указатель на класс CDialogs1Doc
ASSERT_VALID(pDoc); //Если pDoc = NULL, то прерываем выполнение программы
//Пересылаем значение переменной m_WidthDlg в переменную m_WidthPenDoc
pDoc -> m_WidthPenDoc = dlg.m_WidthDlg;
Invalidate(); //Вырабатывается сообщение WM_PAINT(Повреждение окна и для него вызывается обработчик OnDraw
}
}
Чтобы класс CDialogsView мог работать с членами класса Dlg, необходимо включить команду #include "Dlg.h" в файл DialogsView.cpp после строки #include "Dialogs.h".
Добавление стандартного диалога для выбора цвета кисти.
Добавление переменной в класс cDialogsView для определения дополнительной цветовой палитры стандартного диалога.
Добавим описание переменной MyColors[16] типа COLORREF в класс CDialogsView с модификатором public. Добавить описание массива MyColors[16] при помощи контекстного меню для класса CDialogsView не получиться. Сделаем это по-другому. Найдем заголовочный файл DialogsView.h класса CDialogsView и добавим описание с помощью клавиатуры:
COLORREF MyColors[16];
Заполним произвольными кодами цвета массив из 16 элементов для определения дополнительной цветовой палитры стандартного диалога. Определим массив в конструкторе класса CDialogsView:
CDialogsView::CDialogsView()
{
// Массив цветов пользователя
MyColors[0] = RGB(0,0,0);
MyColors[1] = RGB(0,0,255);
MyColors[2] = RGB(0,255,0);
MyColors[3] = RGB(0,255,255);
MyColors[4] = RGB(255,0,0);
MyColors[5] = RGB(255,0,255);
MyColors[6] = RGB(255,255,0);
MyColors[7] = RGB(0,0,128);
MyColors[8] = RGB(0,128,0);
MyColors[9] = RGB(0,128,128);
MyColors[10] = RGB(128,0,0);
MyColors[11] = RGB(0,128,128);
MyColors[12] = RGB(128,128,0);
MyColors[13] = RGB(0,0,64);
MyColors[14] = RGB(0,64,0);
MyColors[15] = RGB(64,0,0);
}
