Стоит Windows 8 Pro, Visual Studio 2010 Express Edition . |
Работа MFC с GDI (GDI+)
Создание каркаса приложения
-
Создайте новый проект MFC App C++ под названием Graphics на основе диалога
-
После создания мастером главной формы удалите из диалога все элементы управления
-
Русифицируйте ресурсы диалоговых окон с идентификаторами IDD_GRAPHICS_DIALOG и IDD_ABOUTBOX
-
Измените заголовок главного диалогового окна, указав фамилию, номер и название лабораторной работы
-
Измените свойство Minimize Box главного диалогового окна на True
-
Отредактируйте диалоговый ресурс IDD_ABOUTBOX
-
Замените иконку приложения на любую иную по выбору
Разработка дизайна главного диалогового окна
Окно должно содержать три группы переключателей:
- Для задания инструмента рисования
- Для выбора фигуры рисования
- Для выбора кисти, пера или рисунка
Окно должно иметь две кнопки:
- Кнопку вызова стандартного диалога File Open для выбора рисунка
- Кнопку завершения приложения
-
Разработайте показанный дизайн окна с соблюдением отмеченных рекомендаций
- Управляющие элементы радиокнопок каждой группы располагайте строго в последовательности сверху вниз
- Каждому первому переключателю группы установите свойство Group в значение True
- Измените сгенерированные автоматически ID на более осмысленные в соответствии с названием, например, IDC_RPEN, IDC_RBRUSH и т.д., а для кнопок: IDC_BBITMAP, IDC_BEXIT
Переодически стройте приложение для контроля возможных ошибок
После создания диалогового окна нужно назначить по одной переменной для каждой группы переключателей. Для этого нужно создать целочисленную переменную для первого переключателя каждой группы. Для всех последующих переключателей группы назначенная переменная будет принимать последовательно возрастающие значения в порядке возрастания значений их идентификаторов. Именно по этой причине важно создавать все переключатели группы по порядку. Если добавление выполнялось не по порядку, в режиме Format/Tab Order можно установить нужный порядок следования.
-
Для первых переключателей каждой группы назначьте переменные в соответствии с таблицей
Переменные для управления переключателями Объект Переменная Категория Тип Доступ IDC_RPEN m_iTool Value int public IDC_RLINE m_iShape Value int int IDC_RBLACK m_iColor Value public public Для этого выделите каждый первый переключатель группы и через контекстное меню вызывайте мастер Add Variable. Поля мастера заполняйте по образцу
Мастер добавит код
Файл GraphicsDlg.h class CGraphicsDlg : public CDialog { .................................................... public: // Для управления переключателями группы Tool int m_iTool; // Для управления переключателями группы Shape int m_iShape; // Для управления переключателями группы Color int m_iColor; };
Файл GraphicsDlg.cpp CGraphicsDlg::CGraphicsDlg(CWnd* pParent /*=NULL*/) : CDialog(CGraphicsDlg::IDD, pParent) , m_iTool(0) , m_iShape(0) , m_iColor(0) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }
Файл GraphicsDlg.cpp void CGraphicsDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Radio(pDX, IDC_RPEN, m_iTool); DDX_Radio(pDX, IDC_RLINE, m_iShape); DDX_Radio(pDX, IDC_RBLACK, m_iColor); }
-
Создайте обработчик для клавиши Exit. Введите в обработчик код OnOK()
-
Запустите приложение и убедитесь, что переключатели каждой группы работают независимо
-
Установите, чтобы при запуске приложения в группе Color был выделен переключатель White. Для этого измените в конструкторе класса CGraphicsDlg индекс инициализации переменной группы
Файл GraphicsDlg.cpp CGraphicsDlg::CGraphicsDlg(CWnd* pParent /*=NULL*/) : CDialog(CGraphicsDlg::IDD, pParent) , m_iTool(0) , m_iShape(0) , m_iColor(7) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }
-
Добавление диалогового окна для рисования
Добавим окно для использования в качестве холста рисования. Оно будет открыто во все время работы приложения. На нем не будет никаких управляющих элементов - только холст.
-
Раскройте дерево ресурсов проекта и, вызывая для каждого типа ресурса контекстное меню, обратите внимание, как меняется название последней опции контекстного меню Insert с добавлением имени типа ресурса
-
На узле Dialog из контекстного меню выполните опцию Insert Dialog
-
Удалите из нового диалогового окна, которое мы будем в дальнейшем использовать как холст, все элементы управления
-
Выделите диалоговое окно и в панели свойств установите свойство System Menu в значение False. Убедитесь, что сразу исчезнет системная кнопка закрытия окна. Это исключает возможность для пользователя закрыть окно до окончания работы всего приложения
-
Присвойте заголовку окна значение "Холст"
-
Присвойте окну идентификатор ресурса IDD_PAINT_DLG. Обратите внимание, что для диалоговых окон принято применять префикс IDD_, а для элементов управления - IDC_
-
Щелкните правой кнопкой мыши на диалоговом окне холста и выполните опции Add Class контекстного меню. Заполните поля мастера создания класса, управляющего диалоговым окном, так
Примечание. Перед добавлением нового класса нужно удостовериться, что текущим выделением является именно диалоговое окно, а не иной элемент или код. В противном случае мастер не сможет понять, что класс нужно создавать для диалогового окна.