Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Библиотека классов Microsoft Foundation (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, манифест общих элементов управления и панель навигации. Оставьте все остальное как есть. Опция области навигации создаст панель левее окна с уже встроенным
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::SetRelatedListCMFCShellListCtrlбудет автоматически отображаться содержимое элемента, выбранного в элементе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++.