Пошаговое руководство. Использование новых элементов управления оболочки MFC
В этом пошаговом руководстве вы создадите приложение, похожее на проводник. Вы создадите окно с двумя панелями. В левой области будет содержаться объект CMFCShellTreeCtrl , отображающий рабочий стол в иерархическом представлении. В правой области будет содержаться CMFCShellListCtrl , в которую отображаются файлы в папке, выбранной на левой панели.
Необходимые компоненты
В Visual Studio 2017 и более поздних версиях поддержка MFC является необязательным компонентом. Чтобы установить его, откройте установщик Visual Studio из Меню Windows. Найдите используемую версию Visual Studio и нажмите кнопку "Изменить ". Убедитесь, что плитка "Разработка компьютеров с помощью C++" проверка. В разделе "Необязательные компоненты" проверка кнопку поддержки MFC.
В этом пошаговом руководстве предполагается, что вы настроили Visual Studio для использования Параметры общего разработки. Если вы используете другой параметр разработки, некоторые окна Visual Studio, которые мы используем в этом пошаговом руководстве, могут не отображаться по умолчанию.
Создание нового приложения MFC с помощью мастера приложений MFC
Эти действия зависят от используемой версии Visual Studio. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Создание проекта MFC в Visual Studio
В главном меню выберите Файл >Создать >Проект, чтобы открыть диалоговое окно Создание проекта.
В поле поиска вверху введите MFC и выберите приложение MFC из списка результатов.
Нажмите кнопку Далее. На следующей странице введите имя проекта и укажите расположение проекта при необходимости.
Нажмите кнопку Создать, чтобы создать проект.
После отображения мастера приложений MFC используйте следующие параметры:
Выберите тип приложения слева. Затем выберите один документ и выберите поддержку архитектуры document/View. В разделе "Стиль проекта" выберите Visual Studio и в раскрывающемся списке "Стиль и цвета" выберите Office 2007 (синяя тема).
На панели поддержки составных документов выберите "Нет".
Не вносите никаких изменений в область свойств шаблона документа.
На панели "Функции пользовательского интерфейса" убедитесь, что выбран параметр "Использовать панель меню" и панель инструментов. Оставьте все остальные параметры так же, как они есть.
На панели дополнительных функций выберите элементы ActiveX, манифест common Control и панель навигации. Оставьте все остальное как есть. Параметр области навигации приведет к созданию панели слева от окна с
CMFCShellTreeCtrl
уже внедренным.Мы не будем вносить изменения в область "Созданные классы ", поэтому нажмите кнопку "Готово ", чтобы создать проект MFC.
Создание проекта MFC в Visual Studio 2017 или более ранней версии
Используйте мастер приложений MFC для создания нового приложения MFC. Чтобы запустить мастер, в меню "Файл " выберите "Создать" и выберите "Проект". Откроется диалоговое окно "Новый проект ".
В диалоговом окне "Новый проект" разверните узел Visual C++ в области типов проектов и выберите MFC. Затем в области шаблонов выберите приложение MFC. Введите имя проекта, например
MFCShellControls
и нажмите кнопку "ОК".После отображения мастера приложений MFC используйте следующие параметры:
В области "Тип приложения" в разделе "Тип приложения" снимите флажок "Документы с вкладками". Затем выберите один документ и выберите поддержку архитектуры Document/View. В разделе "Стиль проекта" выберите Visual Studio и в раскрывающемся списке "Стиль и цвета" выберите Office 2007 (синяя тема).
На панели поддержки составных документов выберите "Нет".
Не вносите никаких изменений в область строк шаблона документа.
В области поддержки баз данных (Visual Studio 2015 и более ранних версий) выберите "Нет", так как приложение не использует базу данных.
На панели "Функции пользовательского интерфейса" убедитесь, что выбран параметр "Использовать панель меню" и панель инструментов. Оставьте все остальные параметры так же, как они есть.
На панели расширенных функций в разделе "Дополнительные функции" выберите только элементы ActiveX и манифест common Control. В области расширенных кадров выберите только параметр области навигации. Это приведет к созданию панели слева от окна с
CMFCShellTreeCtrl
уже внедренным.Мы не будем вносить изменения в область "Созданные классы ", поэтому нажмите кнопку "Готово ", чтобы создать проект MFC.
Убедитесь, что приложение было успешно создано путем создания и запуска его. Чтобы создать приложение, в меню "Сборка" выберите "Создать решение". Если приложение успешно выполняет сборку, запустите приложение, нажав кнопку "Начать отладку " в меню отладки .
Мастер автоматически создает приложение с стандартной строкой меню, стандартной панелью инструментов, стандартной строкой состояния и панелью Outlook слева от окна с представлением папок и представлением календаря .
Добавление элемента управления списком оболочки в представление документа
В этом разделе вы добавите экземпляр представления, созданного
CMFCShellListCtrl
мастером. Откройте файл заголовка представления, дважды щелкнув MFCShellControlsView.h в Обозреватель решений.Найдите директиву
#pragma once
в верхней части файла заголовка. Сразу же под этим кодом добавьте этот код, чтобы включить файл заголовка дляCMFCShellListCtrl
:#include <afxShellListCtrl.h>
Теперь добавьте переменную члена типа
CMFCShellListCtrl
. Сначала найдите следующий комментарий в файле заголовка:// Generated message map functions
Сразу над этим комментарием добавьте следующий код:
private: CMFCShellListCtrl m_wndList;
Мастер приложений MFC уже создал
CMFCShellTreeCtrl
объект вCMainFrame
классе, но это защищенный элемент. Теперь мы получим доступ к объекту, поэтому создадим для него метод доступа. Откройте файл заголовка MainFrm.h, дважды щелкнув его в Обозреватель решений. Найдите следующий комментарий:// Attributes
Сразу же под ним добавьте следующее объявление метода:
public: CMFCShellTreeCtrl& GetShellTreeCtrl();
Затем откройте исходный файл MainFrm.cpp, дважды щелкнув его в Обозреватель решений. В нижней части этого файла добавьте следующее определение метода:
CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl() { return m_wndTree; }
Теперь мы обновим
CMFCShellControlsView
класс для обработкиWM_CREATE
сообщения Windows. Откройте окно представления классов и выберитеCMFCShellControlsView
класс. Щелкните его правой кнопкой мыши и выберите Свойства.Затем в мастере классов щелкните вкладку "Сообщения ". Прокрутите вниз, пока не найдете
WM_CREATE
сообщение. В раскрывающемсяWM_CREATE
списке рядом с кнопкой " <Добавить> OnCreate". Команда создает обработчик сообщений для нас и автоматически обновляет карту сообщений MFC.В методе
OnCreate
теперь мы создадим нашCMFCShellListCtrl
объект.OnCreate
Найдите определение метода в исходном файле MFCShellControlsView.cpp и замените его реализацию следующим кодом:int CMFCShellControlsView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; CRect rectDummy (0, 0, 0, 0); m_wndList.Create(WS_CHILD | WS_VISIBLE | LVS_REPORT, rectDummy, this, 1); return 0; }
Повторите предыдущий шаг, но для
WM_SIZE
сообщения. Это приведет к повторному удалению представления приложений при изменении размера окна приложения. Замените определение методаOnSize
следующим кодом:void CMFCShellControlsView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); m_wndList.SetWindowPos(NULL, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); }
Последним шагом является подключение
CMFCShellTreeCtrl
объектов иCMFCShellListCtrl
объектов с помощью метода CMFCShellTreeCtrl::SetRelatedList . После вызоваCMFCShellTreeCtrl::SetRelatedList
CMFCShellListCtrl
будет автоматически отображаться содержимое элемента, выбранного в элементеCMFCShellTreeCtrl
. Мы подключаем объекты в методеOnActivateView
, который переопределяется из CView::OnActivateView.В файле заголовка MFCShellControlsView.h в объявлении
CMFCShellControlsView
класса добавьте следующее объявление метода:protected: virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
Затем добавьте определение метода в исходный файл MFCShellControlsView.cpp:
void CMFCShellControlsView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) { if (bActivate&& AfxGetMainWnd() != NULL) { ((CMainFrame*)AfxGetMainWnd())->GetShellTreeCtrl().SetRelatedList(&m_wndList); } CView::OnActivateView(bActivate, pActivateView, pDeactiveView); }
Так как мы вызываем методы из
CMainFrame
класса, мы должны добавить директиву#include
в верхней части исходного файла MFCShellControlsView.cpp:#include "MainFrm.h"
Убедитесь, что приложение было успешно создано путем создания и запуска его. Чтобы создать приложение, в меню "Сборка" выберите "Создать решение". Если приложение успешно строится, запустите его, нажав кнопку "Начать отладку " в меню отладки .
Теперь вы увидите сведения о элементе, выбранном
CMFCShellTreeCtrl
в области представления. Щелкнув узел в узлеCMFCShellTreeCtrl
,CMFCShellListCtrl
он будет автоматически обновлен. Аналогичным образом, если дважды щелкнуть папку в папкеCMFCShellListCtrl
,CMFCShellTreeCtrl
она должна быть автоматически обновлена.Щелкните правой кнопкой мыши любой элемент в элементе управления "Дерево" или в элементе управления списка. Вы получаете то же контекстное меню, как если бы вы использовали реальный проводник.
Следующие шаги
Мастер создал панель Outlook с областью папок и областью календаря . Вероятно, в окне Обозреватель не имеет смысла иметь область календаря, поэтому удалите эту область сейчас.
Он
CMFCShellListCtrl
поддерживает просмотр файлов в разных режимах, таких как большие значки, небольшие значки, список и сведения. Обновите приложение, чтобы реализовать эту функцию. Указание. См. примеры Visual C++.