Пошаговое руководство. Обновление приложения MFC Scribble (часть 2)
часть 1 данного пошагового руководства, как добавлять Microsoft Office Fluent ленты на классицистическому приложения Scribble.Эта часть показано, как добавлять панели и элементы управления ленты, что пользователи могут использовать вместо меню и команд.
Обязательные компоненты
Подразделы
В этой части пошагового руководства содержит следующие подразделы.
Добавление новых панелей на ленту
Добавить панель Справки на ленту
Добавление панели пера на ленту
Добавление кнопки цвета на ленту
Добавить элемент к классу документа цвета
Инициализация пера и сохранить настройки
Добавление новых панелей на ленту
Показать таких действий, как добавить панель Вид, которая содержит 2 " флажок ", контролируют видимость панели инструментов и строки состояния, а также область, которая содержит Окно по вертикали, ориентированное разворачивающаяся кнопка, которое контролирует создание и размещение windows интерфейс MDI.
Добавление панели вид и панель окна к гистограммам ленты
Создайте область Вид, которая содержит 2, установите или снимите флажок строка состояния и панель инструментов.
Из Панель элементов перетащите Панель к категории Главная.Затем перетащите 2 флажки на панели.
Щелкните панель, чтобы изменить его свойства.Изменение подпись к Вид.
Щелкните первый флажок, чтобы изменить его свойства.Измените Идентификатор к ID_VIEW_TOOLBAR и подпись к Панель инструментов.
Щелкните второй флажок, чтобы изменить его свойства.Измените Идентификатор к ID_VIEW_STATUS_BAR и подпись к Строка состояния.
Создайте область Окно с разворачивающейся кнопки.Когда пользователь щелкает разворачивающаяся кнопка отображается контекстное меню 3 команды, которая уже определены в приложении Scribble.
Из Панель элементов перетащите Панель к категории Главная.Затем перетащите Кнопка на панели.
Щелкните панель, чтобы изменить его свойства.Изменение подпись к Окно.
Щелкните кнопку.Измените подпись к Окна, Ключи к w, большой индекс образа к 1 и режим разбиения к Ложь.Затем нажмите кнопку с многоточием (###…) рядом с элементы меню, чтобы открыть диалоговое окно Редактор элементов.
Щелкните Добавить 3 раза, чтобы добавить 3 кнопки.
Щелкните первую кнопку а затем изменить подпись к Новое окно и Идентификатор к ID_WINDOW_NEW.
Щелкните вторая кнопка а затем изменить подпись к Каскадом и Идентификатор к ID_WINDOW_CASCADE.
Щелкните третья кнопка а затем изменить подпись к Рядом и Идентификатор к ID_WINDOW_TILE_HORZ.
Сохраните изменения, а затем выполните построение и запустите приложение.Панели Вид и Окно должны отображаться.Нажмите кнопку, чтобы убедиться, что они работают правильно.
[Подразделы]
Добавить панель Справки на ленту
Теперь можно присвоить 2 пункта меню, определенных в приложении Scribble для кнопок ленты, которые называются Вызов справки и о Scribble.Кнопки добавляются к новой именованной области Справка.
Добавить панель Справки
Из Панель элементов перетащите Панель к категории Главная.Затем перетащите 2 Кнопки на панели.
Щелкните панель, чтобы изменить его свойства.Изменение подпись к Справка.
Щелкните первой кнопки.Изменение подпись к Вызов справки и Идентификатор к ID_HELP_FINDER.
Щелкните вторая кнопка.Изменение подпись к о Scribble… и Идентификатор к ID_APP_ABOUT.
Сохраните изменения, а затем выполните построение и запустите приложение.Панель Справка, которая содержит 2 кнопки ленты должна отображаться.
Важно
При нажатии кнопки Вызов справки, приложения Scribble открывает справку your_project_name сжанную с файлом .chm HTML (.chm).Следовательно, если проект не называется Scribble, то необходимо переименовать файл справки для имени проекта.
[Подразделы]
Добавление панели пера на ленту
Теперь добавьте панель для кнопок отображения, которые контролируют толщину и цвет пера.Эта панель содержит флажок, переключает толщиные и неявные пера.Его функциональности напоминает из пункта меню Толстая линия приложения Scribble.
Исходный приложения Scribble позволяет ширины пера пользователя выбирать из диалогового окна, отображаемого при нажатии пользователем Ширина пера в меню.Поскольку полоса ленты достаточно места для новых элементов управления можно заменить диалоговое окно с помощью 2 полей со списком на ленте.Одно поле со списком тонкой корректирует ширину пера и другое поле со списком корректирует ширину пера, толщине.
Добавление панели и поле со списком на ленте пера
Из Панель элементов перетащите Панель к категории Главная.Затем перетащите Флажок и 2 поля со списком на панели.
Щелкните панель, чтобы изменить его свойства.Изменение подпись к Перо.
Установите флажок.Изменение подпись к Используйте толстой и Идентификатор к ID_PEN_THICK_OR_THIN.
Щелкните первое поле со списком.Изменение подпись к Утончьте пера, Идентификатор к ID_PEN_THIN_WIDTH, Текст к 2, Тип к Раскрывающийся список и Данные к 1; 2; 3; 4; 5; 6; 7; 8; 9;.
Щелкните второе поле со списком.Изменение подпись к Толстая перо, Идентификатор к ID_PEN_THICK_WIDTH, Текст к wType, Тип к Раскрывающийся список и Данные к 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20;.
Новые поля со списком не соответствуют всем существующим пунктам меню.Поэтому необходимо создать пункт меню для каждого параметра в виде ручки.
В окне Ресурсы, открыть ресурс меню IDR_SCRIBBTYPE.
Нажмите кнопку Перо чтобы открыть меню p ru.Щелкните здесь тип и введите Thi&n перо.
Щелкните правой кнопкой мыши текст, который был только что введенные, чтобы открыть окно Свойства, а затем изменяется свойство идентификатора в ID_PEN_THIN_WIDTH.
Также необходимо создать обработчик событий для каждого пункта меню пера.Щелкните правой кнопкой мыши пункт меню Thi&n пера, созданный и нажмите кнопку добавить обработчик событий.Мастер обработчика события.
В окне Список классов в мастере выберите CScribbleDoc а затем нажмите кнопку Добавление и правка.Это создает обработчик событий CScribbleDoc::OnPenThinWidth.
Добавьте следующий код к CScribbleDoc::OnPenThinWidth.
// Get a pointer to the ribbon bar CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); // Get a pointer to the Thin Width combo box CMFCRibbonComboBox* pThinComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THIN_WIDTH)); //Get the selected value int nCurSel = pThinComboBox->GetCurSel(); if (nCurSel >= 0) { m_nThinWidth = atoi(pThinComboBox->GetItem(nCurSel)); } // Create a new pen using the selected width ReplacePen();
Затем необходимо создать пункт меню и обработчики событий, толщине пера.
В окне Ресурсы, открыть ресурс меню IDR_SCRIBBTYPE.
Нажмите кнопку Перо чтобы открыть меню пера.Щелкните здесь тип и введите Thic&k перо.
Щелкните правой кнопкой мыши текст будет просто типизированный для отображения окна Свойства.Измените значение свойства id на ID_PEN_THICK_WIDTH.
Щелкните правой кнопкой мыши пункт меню Толстая перо, созданную и выберите пункт Добавить обработчик события.Мастер обработчика события.
В окне Список классов мастера выберите CScribbleDoc а затем нажмите кнопку Добавление и правка.Это создает обработчик событий CScribbleDoc::OnPenThickWidth.
Добавьте следующий код к CScribbleDoc::OnPenThickWidth.
// Get a pointer to the ribbon bar CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx *) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonComboBox* pThickComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THICK_WIDTH)); // Get the selected value int nCurSel = pThickComboBox->GetCurSel(); if (nCurSel >= 0) { m_nThickWidth = atoi(pThickComboBox->GetItem(nCurSel)); } // Create a new pen using the selected width ReplacePen();
Сохраните изменения, а затем выполните построение и запустите приложение.Новые кнопки и полей со списком должны отображаться.Попытка с использованием различных ширина пера для scribble.
[Подразделы]
Добавление кнопки на панели цвета пера
Затем добавьте объект CMFCRibbonColorButton, который позволяет пользователю scribble цветом.
Добавление кнопки на панели цвета пера
Перед добавлением кнопку цвета, создайте пункт меню.В окне Ресурсы, открыть ресурс меню IDR_SCRIBBTYPE.Выберите пункт меню Перо чтобы открыть меню пера.Щелкните здесь тип и введите &Color.Щелкните правой кнопкой мыши текст будет просто типизированный для отображения окна Свойства.Измените свойство id со ID_PEN_COLOR.
Теперь добавьте кнопку выбора цвета.Из Панель элементов перетащите Кнопка цвета на панели Перо.
Нажмите кнопку цвета.Измените подпись к Цвет, Идентификатор к ID_PEN_COLOR, ПРОСТАЯПросмотрите к Истина, большой индекс образа к 1 и режим разбиения к Ложь.
Сохраните изменения, а затем выполните построение и запустите приложение.Новая кнопку цвета должна отображаться на панели Перо.Однако его нельзя использовать, так как он еще не содержит обработчик событий.Следующие шаги показывают, как добавить обработчик событий для кнопки.
[Подразделы]
Добавить элемент к классу документа цвета
Поскольку исходная приложения Scribble нет цвета пера, необходимо написать реализация их.Для хранения цвет пера документа добавьте новый элемент в класс документа, CscribbleDoc.
Добавить элемент к классу документа цвета
В scribdoc.h в классе CScribbleDoc найдите раздел // Attributes.Добавьте следующие строки кода после определения элемента данных m_nThickWidth.
// Current pen color COLORREF m_penColor;
Каждый документ содержит список гладит передать, что пользователь уже выписал.Каждый штрих, определяется объектом CStroke.Класс CStroke не содержит сведений о цвете пера.Поэтому необходимо изменить класс.В scribdoc.h в классе CStroke добавьте следующие строки кода после определения элемента данных m_nPenWidth.
// Pen color for the stroke COLORREF m_penColor;
В scribdoc.h добавьте новый конструктор CStroke, параметры которого определяют ширину и цвет.Добавьте следующую строку кода после выписки CStroke(UINT nPenWidth);.
CStroke(UINT nPenWidth, COLORREF penColor);
В scribdoc.cpp добавьте реализация нового конструктора CStroke.Добавьте следующий код после реализации конструктора CStroke::CStroke(UINT nPenWidth).
// Constructor that uses the document's current width and color CStroke::CStroke(UINT nPenWidth, COLORREF penColor) { m_nPenWidth = nPenWidth; m_penColor = penColor; m_rectBounding.SetRectEmpty(); }
Измените вторая линия метода CStroke::DrawStroke следующим образом.
if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, m_penColor))
Задайте по умолчанию цвет пера для класса документа.В scribdoc.cpp добавьте следующие линии на CScribbleDoc::InitDocument, выписки m_nThickWidth = 5;.
// default pen color is black m_penColor = RGB(0,0,0);
В scribdoc.cpp измените первая линия метода CScribbleDoc::NewStroke к другому.
CStroke* pStrokeItem = new CStroke(m_nPenWidth, m_penColor);
Измените являются последней линией метода CScribbleDoc::ReplacePen к другому.
m_penCur.CreatePen(PS_SOLID, m_nPenWidth, m_penColor);
Добавленный элемент m_penColor в предыдущем шаге.Теперь создайте обработчик событий для кнопки цвета, которая устанавливает участника.
В окне Ресурсы, открыть ресурс меню IDR_SCRIBBTYPE.
Щелкните правой кнопкой мыши пункт меню Цвет и нажмите кнопку добавьте обработчик событий….Мастер обработчика события.
В окне Список классов в мастере выберите CScribbleDoc а затем нажмите кнопку Добавление и правка.Это создает заглушки обработчиков событий CScribbleDoc::OnPenColor.
Замените заглушки для обработчика событий CScribbleDoc::OnPenColor следующим кодом.
void CScribbleDoc::OnPenColor() { // Change pen color to reflect color button's current selection CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonColorButton* pColorBtn = DYNAMIC_DOWNCAST( CMFCRibbonColorButton, pRibbon->FindByID(ID_PEN_COLOR)); m_penColor = pColorBtn->GetColor(); // Create new pen using the selected color ReplacePen(); }
Сохраните изменения, а затем выполните построение и запустите приложение.Можно нажать кнопку цвета и изменить цвет пера.
[Подразделы]
Инициализация пера и сохранить настройки
Далее следует инициализировать цвет и ширину ручек.Наконец, сохранить и загружает документ цвета из файла.
Инициализация элементов управления на панели ленты
Инициализация пера на панели ленты.
Добавьте следующий код в scribdoc.cpp в методе CScribbleDoc::InitDocument, выписки m_sizeDoc = CSize(200,200).
// Reset the ribbon UI to its initial values CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonColorButton* pColorBtn = DYNAMIC_DOWNCAST( CMFCRibbonColorButton, pRibbon->FindByID(ID_PEN_COLOR)); // Set ColorButton to black pColorBtn->SetColor(RGB(0,0,0)); CMFCRibbonComboBox* pThinComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THIN_WIDTH)); // Set Thin pen combobox to 2 pThinComboBox->SelectItem(1); CMFCRibbonComboBox* pThickComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THICK_WIDTH)); // Set Thick pen combobox to 5 pThickComboBox->SelectItem(0);
Сохраните цвет рисования к файлу.Добавьте следующий оператор в scribdoc.cpp в методе CStroke::Serialize, выписки ar << (WORD)m_nPenWidth;.
ar << (COLORREF)m_penColor;
Наконец, загрузите документе цвета из файла.Добавьте следующую строку кода в методе CStroke::Serialize, выписки m_nPenWidth = w;.
ar >> m_penColor;
Теперь scribble в цвете и сохраните документ в файл.
[Подразделы]
Заключение
Обновлении приложения Scribble MFC.Используйте в этом пошаговом руководстве в качестве руководства при изменении существующих приложений.
См. также
Задачи
Пошаговое руководство. Обновление приложения MFC Scribble (часть 1)