Пошаговое руководство. Использование новых элементов управления оболочки 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

  1. В главном меню выберите Файл >Создать >Проект, чтобы открыть диалоговое окно Создание проекта.

  2. В поле поиска вверху введите MFC и выберите приложение MFC из списка результатов.

  3. Нажмите кнопку Далее. На следующей странице введите имя проекта и укажите расположение проекта при необходимости.

  4. Нажмите кнопку Создать, чтобы создать проект.

    После отображения мастера приложений MFC используйте следующие параметры:

    1. Выберите тип приложения слева. Затем выберите один документ и выберите поддержку архитектуры document/View. В разделе "Стиль проекта" выберите Visual Studio и в раскрывающемся списке "Стиль и цвета" выберите Office 2007 (синяя тема).

    2. На панели поддержки составных документов выберите "Нет".

    3. Не вносите никаких изменений в область свойств шаблона документа.

    4. На панели "Функции пользовательского интерфейса" убедитесь, что выбран параметр "Использовать панель меню" и панель инструментов. Оставьте все остальные параметры так же, как они есть.

    5. На панели дополнительных функций выберите элементы ActiveX, манифест common Control и панель навигации. Оставьте все остальное как есть. Параметр области навигации приведет к созданию панели слева от окна с CMFCShellTreeCtrl уже внедренным.

    6. Мы не будем вносить изменения в область "Созданные классы ", поэтому нажмите кнопку "Готово ", чтобы создать проект MFC.

Создание проекта MFC в Visual Studio 2017 или более ранней версии

  1. Используйте мастер приложений MFC для создания нового приложения MFC. Чтобы запустить мастер, в меню "Файл " выберите "Создать" и выберите "Проект". Откроется диалоговое окно "Новый проект ".

  2. В диалоговом окне "Новый проект" разверните узел Visual C++ в области типов проектов и выберите MFC. Затем в области шаблонов выберите приложение MFC. Введите имя проекта, например MFCShellControls и нажмите кнопку "ОК".

    После отображения мастера приложений MFC используйте следующие параметры:

    1. В области "Тип приложения" в разделе "Тип приложения" снимите флажок "Документы с вкладками". Затем выберите один документ и выберите поддержку архитектуры Document/View. В разделе "Стиль проекта" выберите Visual Studio и в раскрывающемся списке "Стиль и цвета" выберите Office 2007 (синяя тема).

    2. На панели поддержки составных документов выберите "Нет".

    3. Не вносите никаких изменений в область строк шаблона документа.

    4. В области поддержки баз данных (Visual Studio 2015 и более ранних версий) выберите "Нет", так как приложение не использует базу данных.

    5. На панели "Функции пользовательского интерфейса" убедитесь, что выбран параметр "Использовать панель меню" и панель инструментов. Оставьте все остальные параметры так же, как они есть.

    6. На панели расширенных функций в разделе "Дополнительные функции" выберите только элементы ActiveX и манифест common Control. В области расширенных кадров выберите только параметр области навигации. Это приведет к созданию панели слева от окна с CMFCShellTreeCtrl уже внедренным.

    7. Мы не будем вносить изменения в область "Созданные классы ", поэтому нажмите кнопку "Готово ", чтобы создать проект MFC.

Убедитесь, что приложение было успешно создано путем создания и запуска его. Чтобы создать приложение, в меню "Сборка" выберите "Создать решение". Если приложение успешно выполняет сборку, запустите приложение, нажав кнопку "Начать отладку " в меню отладки .

Мастер автоматически создает приложение с стандартной строкой меню, стандартной панелью инструментов, стандартной строкой состояния и панелью Outlook слева от окна с представлением папок и представлением календаря .

Добавление элемента управления списком оболочки в представление документа

  1. В этом разделе вы добавите экземпляр представления, созданного CMFCShellListCtrl мастером. Откройте файл заголовка представления, дважды щелкнув MFCShellControlsView.h в Обозреватель решений.

    Найдите директиву #pragma once в верхней части файла заголовка. Сразу же под этим кодом добавьте этот код, чтобы включить файл заголовка для CMFCShellListCtrl:

    #include <afxShellListCtrl.h>
    

    Теперь добавьте переменную члена типа CMFCShellListCtrl. Сначала найдите следующий комментарий в файле заголовка:

    // Generated message map functions
    

    Сразу над этим комментарием добавьте следующий код:

    private:
    CMFCShellListCtrl m_wndList;
    
  2. Мастер приложений MFC уже создал CMFCShellTreeCtrl объект в CMainFrame классе, но это защищенный элемент. Теперь мы получим доступ к объекту, поэтому создадим для него метод доступа. Откройте файл заголовка MainFrm.h, дважды щелкнув его в Обозреватель решений. Найдите следующий комментарий:

    // Attributes
    

    Сразу же под ним добавьте следующее объявление метода:

    public:
        CMFCShellTreeCtrl& GetShellTreeCtrl();
    

    Затем откройте исходный файл MainFrm.cpp, дважды щелкнув его в Обозреватель решений. В нижней части этого файла добавьте следующее определение метода:

    CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl()
    {
         return m_wndTree;
    }
    
  3. Теперь мы обновим 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;
    }
    
  4. Повторите предыдущий шаг, но для 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);
    }
    
  5. Последним шагом является подключение 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"
    
  6. Убедитесь, что приложение было успешно создано путем создания и запуска его. Чтобы создать приложение, в меню "Сборка" выберите "Создать решение". Если приложение успешно строится, запустите его, нажав кнопку "Начать отладку " в меню отладки .

    Теперь вы увидите сведения о элементе, выбранном CMFCShellTreeCtrl в области представления. Щелкнув узел в узле CMFCShellTreeCtrl, CMFCShellListCtrl он будет автоматически обновлен. Аналогичным образом, если дважды щелкнуть папку в папке CMFCShellListCtrl, CMFCShellTreeCtrl она должна быть автоматически обновлена.

    Щелкните правой кнопкой мыши любой элемент в элементе управления "Дерево" или в элементе управления списка. Вы получаете то же контекстное меню, как если бы вы использовали реальный проводник.

Следующие шаги

  • Мастер создал панель Outlook с областью папок и областью календаря . Вероятно, в окне Обозреватель не имеет смысла иметь область календаря, поэтому удалите эту область сейчас.

  • Он CMFCShellListCtrl поддерживает просмотр файлов в разных режимах, таких как большие значки, небольшие значки, список и сведения. Обновите приложение, чтобы реализовать эту функцию. Указание. См. примеры Visual C++.

См. также

Пошаговые руководства