Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом пошаговом руководстве вы создадите приложение, похожее на проводник. Вы создадите окно с двумя панелями. В левой области будет содержаться объект 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::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++.