Цель: получить навыки разработки программы под Windows.
5.1 Теоретическая часть
При создании приложения с использованием библиотеки Microsoft Foundation Classes (MFC) предполагает соблюдение определенной структуры программы. Структура программы MFC включает две основные сущности: документ и представление.
Документ- это имя, присвоенное коллекции данных приложения. Документ определяется как объект класса MFC CDocument, в который добавляются переменные –члены для хранения данных, и функции, для обработки данных.
Представление относится к определенному объекту документа. Представление- это объект, предлагающий механизм отображения данных, которые хранятся в документе. Он определяет, как данные отображаются в окне и как пользователь может взаимодействовать с ними. Программист определяет собственный класс представления, который является наследником класса CView MFC.
5.2 Задание
Создать SDI приложение. Научиться создавать пункты меню:
«Элементы»:
-«Круг»;
- «прямоугольник»;
- «кривая».
«Цвет»:
-красный;
-синий;
-зеленый;
-черный.
5.3 Порядок выполнения работы
1. Создайте новый проект на основе шаблона «Приложение MFC».
2. Выставьте следующие параметры проекта, как показано на рисунке 5.1.
Рисунок 1
3. Проект не будет поддерживать составных документов.
4. Остальные параметры оставим без изменений до пункта «Созданные классы». Далее устанавливаем, что представление приложения является наследником класса CEditView.
Рисунок 2
5. Нажимаем «Готово» и запускаем компиляцию программы (F7) и её запуск Ctrl+F5.
6. Программа практически все уже умеет. Поэкспериментируйте с программой.
7. Добавим свои пункты меню. Для этого переходим в окно ресурсов (Resource View)и выбираем следующие элементы: Painter1.rc->Menu. Дважды щелкаем ЛК мыши на элемент IDR_MAINFRAME.
8. В позицию «Прототип текста(Type Here) »введите название пункта меню. Создайте пункты меню «Элементы» и «Цвет».
Рисунок 3
9. Создайте обработчики событий меню. Обработчики будут реализованы в классе документа. Выделите нужный пункт меню и нажмите ПК мыши. В контекстном меню выберите пункт «Добавить обработчик событий(Add Event Handler)».
Рисунок 4
10. В появившемся окне выбираем тип сообщения «COMMAND», а в списке классов –класс документа. Нажмите кнопку «Добавить/править». В результате в классе CPainterDoc появится код следующего вида:
11. void CPainterDoc::OnColorRed()
12. {
13. // TODO: добавьте свой код обработчика команд
14. }
Рисунок 5
15. Добавим в класс CPainterDoc переменную m_Color типа COLORREF:
16. class CPainterDoc : public CDocument
17. { protected: // создать только из сериализации
44. // Вспомогательная функция, задающая содержимое поиска для обработчика поиска
45. void SetSearchContent(const CString& value);
46. #endif // SHARED_HANDLERS
47. #ifdef SHARED_HANDLERS
48. private:
49. CString m_strSearchContent;
50. CString m_strThumbnailContent;
51. #endif // SHARED_HANDLERS
52. public:
53. afx_msg void OnColorRed();
54. protected:
55. COLORREF m_Color;
56. public:
57. afx_msg void OnColorBlack();
58. afx_msg void OnColorGreen();
59. afx_msg void OnElementCircle();
60. afx_msg void OnElementRectangle();
61. afx_msg void OnElementCurve();
62. };
16. Щелкнете правой кнопкой на папке «Файлы заголовка» на вкладке «Обозреватель решений» и выберите в контекстном меню «Добавить-Добавить новый элемент». Введите имя файла PainterConstants, который будет хранить константы проекта. В файле введите следующий код:
#include "windows.h"
enum ElementType{LINE, RECTANGLE, CURVE};
const COLORREF BLACK=RGB(0,0,0);
const COLORREF RED=RGB(255,0,0);
const COLORREF GREEN=RGB(0,255,0);
const COLORREF BLUE=RGB(0,0,255);
17. Добавьте в файл Painter.h строку #include " PainterConstants.h";
18. Добавьте код инициализации конструктору класса:
CPainterDoc:: CPainterDoc ()
{
m_Element=LINE;
m_Color=BLACK;
}
19. Добавьте код в обработчике событий элементов меню, например:
void CPainterDoc::OnColorRed()
{
m_Color=RED;
}
void CPainterDoc::OnElementCircle()
{
m_Element=CIRCLE;
}
20. Запустите программу и проверьте её работоспособность;
21. Для отметки пунктов меню нужно создать обработчики вида UPDATE_COMMAND_UI. Обработчики сообщений данного типа используются для обновления свойств пункта меню перед их отображением. Рассмотрим пример. Перейдите в «Окно ресурсов» и выбрать пункт меню «Цвет»-«Красный». Нажав ПК мыши вызвать контекстное меню и создать обработчик команды обновления пункта меню (рисунок 6).
Рисунок 6
Далее добавляем следующий код:
void Cmfc2Doc::OnUpdateColorRed(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_Color==RED);
}
Добавленный оператор вызывает функцию SetCheck, которая помечает пункт меню, если её параметр true. В данном случае пункт меню Цвет-Красны будет помечен, если значение переменной m_Color будет равен значению Red.
Подобным образом сделайте обработчики для следующих пунктов меню: синий, черный, зеленый.
Запустите программу на выполнение и проверьте, что галочки устанавливаются правильно. Пример результата работы программы представлен на рисунке 7.
Рисунок 7.
22. Подобным образом сделайте обработчики событий для пункта меню «Элемент». Запустите программу на выполнение и проверьте её работу. Пример результата работы программы представлен на рисунке 8.