演练:使用新MFC Shell控件

在本演练中,您将创建类似于文件资源管理器的应用程序。您将要创建一个包含两个窗格的窗口。左窗格将包含显示了您在分层视图桌面的一 CMFCShellTreeCtrl 对象。在中显示文件在左窗格中选择的右窗格将包含 CMFCShellListCtrl

系统必备

本演练假定,将 Visual Studio 使用 常规开发设置。如果使用设置不同的开发,本演练使用默认情况下的一些 Visual Studio 窗口可能不会显示。

通过使用MFC应用程序向导,创建新MFC应用程序

  1. 使用 MFC 应用程序向导 创建新MFC应用程序。运行向导,从 文件 菜单选择的 新建,然后选择 项目新建项目 将显示对话框。

  2. 新建项目 对话框中,展开在 项目类型 窗格的 Visual C++ 节点并选择 *** MFC ***。然后,在 模板 窗格中,选择的 MFC 应用程序。键入项目的名称,例如 MFCShellControls 然后单击 确定MFC 应用程序向导 将显示。

  3. MFC 应用程序向导 对话框中,单击 下一步应用程序类型 窗格将显示。

  4. 应用程序类型 窗格中,在 应用程序类型下,清除 选项卡式文档 选项。接下来,选择" 单个文档 并选择的 *** 文档/视图结构支持 ***。在 项目类型,选择下的 Visual Studio和从 *** 视觉样式和颜色 *** 拉列表选择的 Office 2007 (蓝色主题)。保留其他选项,它们。单击显示 复合文档支持 窗格的 下一步

  5. 复合文档支持 窗格中,选择 *** 无 ***。单击 下一步 显示 文档模板字符串 窗格。

  6. 不要对 文档模板字符串 窗格的任何更改。单击显示 数据库支持 窗格的 下一步

  7. 数据库支持 窗格中,因为此应用程序不使用数据库,选择 *** 无 *** 。单击显示 用户界面功能 窗格的 下一步

  8. 用户界面功能 窗格中,确保 *** 使用个菜单栏和工具栏 *** 选项。保留其他选项,它们。单击显示 高级功能 窗格的 下一步

  9. 高级功能 窗格中,在 高级功能下,选择仅 ActiveX 控件*** 清单的公共控件 ***。在 高级框架窗格下,选择仅 导航窗格 选项。这将使向导在窗口左侧创建窗格。已经嵌入的 CMFCShellTreeCtrl 。单击显示 生成的类 窗格的 下一步

  10. 我们不对 生成的类 窗格的任何更改。因此,单击创建新的MFC项目的 完成

  11. 通过生成并运行应用程序来验证该应用程序已成功创建。生成应用程序,从 生成 菜单选择的 生成解决方案。如果应用程序生成成功,可以从 调试 菜单中选择 启动调试运行应用程序。

    向导将自动创建具有标准菜单栏、标准工具栏、标准状态栏和一个Outlook栏位于窗口左侧有 文件夹 视图和 日历 视图的应用程序。

若要添加shell列表控件添加到文档视图

  1. 在本节中,将添加 CMFCShellListCtrl 实例添加到向导创建的视图。通过双击中 解决方案资源管理器的MFCShellControlsView.h打开视图标头文件。

    在标头文件的顶部附近找到 #pragma once 指令。在其紧下方添加此代码包括 CMFCShellListCtrl的标头文件:

    #include <afxShellListCtrl.h>
    

    现在添加类型 CMFCShellListCtrl的成员变量。首先,找到以下注释标头文件:

    // Generated message map functions
    

    紧邻该注释添加以下代码:

    private:
        CMFCShellListCtrl m_wndList;
    
  2. MFC 应用程序向导CMainFrame 选件类中创建了一 CMFCShellTreeCtrl 对象,但是,它是受保护的成员。我们后将访问此对象。因此,此时创建它的访问器。通过双击以打开MainFrm.h标头文件在 解决方案资源管理器。找到以下注释:

    // Attributes
    

    在其紧下方,添加以下方法声明:

    public:
        CMFCShellTreeCtrl& GetShellTreeCtrl();
    

    接下来,通过双击以打开MainFrm.cpp源文件在 解决方案资源管理器。在该文件底部,添加下面的方法定义:

    CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl()
    {
        return m_wndTree;
    }
    
  3. 现在我们更新 CMFCShellControlsView 选件类来处理 WM_CREATE windows消息。打开MFCShellControlsView.h标头文件并单击此代码行:

    class CMFCShellControlsView : public CView
    

    接下来,在 属性 窗口中,单击 消息 图标。向下滚动,直到找到 WM_CREATE 消息。从下拉请在 WM_CREATE旁边的列表中,选择 <Add> *** OnCreate ***。这将创建我们的消息处理程序并自动更新MFC消息映射。

    OnCreate 方法我们现在将创建我们的 CMFCShellListCtrl 对象。查找在MFCShellControlsView.cpp源文件的 OnCreate 方法定义,然后用以下代码替换其实现:

    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. 最后一步是连接 CMFCShellTreeCtrlCMFCShellListCtrl 对象使用 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"
    
  6. 通过生成并运行应用程序来验证该应用程序已成功创建。生成应用程序,从 生成 菜单选择的 生成解决方案。如果应用程序生成成功,可以从 调试菜单中选择 启动调试 运行。

    应对在视图窗格中 CMFCShellTreeCtrl 选定的项目现在查看详细信息。在单击 CMFCShellTreeCtrl的节点,将自动更新 CMFCShellListCtrl 。同样,因此,如果您双击" CMFCShellListCtrl的文件夹,应自动更新 CMFCShellTreeCtrl

    右击所有项树控件或在列表控件。请注意可以获得相同的上下文菜单,就象使用物理文件资源管理器。

后续步骤

  • 向导通过 文件夹 窗格和 日历 窗格创建了一个Outlook栏。它可能没有意义在资源管理器窗口的一个 日历 窗格。因此,现在请移除该窗格。

  • CMFCShellListCtrl 支持查看文件不同的方案,如 大图标小图标列表详细信息。更新应用程序实现此功能。提示: Visual C++ 示例参见。

请参见

其他资源

演练(MFC)