共用方式為


逐步解說:使用新的 MFC Shell 控制項

在本逐步解說中,您將建立類似檔案總管的應用程式。 您將建立具有兩個窗格的視窗。 左窗格會保存 CMFCShellTreeCtrl 物件,該物件會在階層式檢視中顯示您的桌面。 右窗格會保存 CMFCShellListCtrl ,以顯示左窗格中所選取資料夾中的檔案。

先決條件

  • 在 Visual Studio 2017 和更新版本中,MFC 支援是選擇性元件。 若要安裝它,請從 [Windows 開始] 功能表開啟 Visual Studio 安裝程式。 尋找您使用的 Visual Studio 版本,然後選擇 [ 修改] 按鈕。 請確定已核取 [使用 C++ 進行桌面開發 ] 圖格。 在 [選用元件] 底下,核取 [MFC 支援 ] 按鈕。

  • 本逐步解說假設您已將Visual Studio設定為使用 一般開發設定。 如果您使用不同的開發設定,我們在此逐步解說中使用的某些 Visual Studio 視窗預設可能不會顯示。

使用 MFC 應用程式精靈建立新的 MFC 應用程式

這些步驟會根據您使用的 Visual Studio 版本而有所不同。 若要查看您慣用 Visual Studio 版本的文件,請使用版本選取器控制項。 其位於此頁面目錄頂端。

在 Visual Studio 中建立 MFC 專案

  1. 從主功能表,選擇 [檔案]> [新增]> [專案],以開啟 [建立新專案] 對話方塊。

  2. 在頂端的搜尋方塊中,輸入 MFC ,然後從結果清單中選擇 MFC 應用程式

  3. [下一步]。 在下一頁中,輸入項目的名稱,並視需要指定專案位置。

  4. 選擇 [建立] 按鈕以建立專案。

    在 [MFC 應用程式精靈] 顯示之後,請使用下列選項:

    1. 選擇左側 的 [應用程式類型 ]。 然後選取 [單一檔 ],然後選取 [ 文件/檢視架構支援]。 在 [項目樣式] 底下,選取 [Visual Studio],然後從 [ 視覺效果樣式和色彩 ] 下拉式清單中選取 [Office 2007 (藍色主題]

    2. 在 [ 複合文件支援] 窗格中,選取 [無]。

    3. 請勿對 [ 文件範本屬性 ] 窗格進行任何變更。

    4. 在 [ 使用者介面功能] 窗格中,確定已選取 [ 使用功能表欄和工具列 ] 選項。 保留所有其他選項原樣不變。

    5. 在 [ 進階功能] 窗格中,選取 [ActiveX 控件]、[ 通用控件指令清單] 和 [ 瀏覽窗格] 選項。 將一切保留原樣。 導航窗格選項會讓精靈在視窗的左側建立內嵌了CMFCShellTreeCtrl的窗格。

    6. 我們不會對 [產生的類別 ] 窗格進行任何變更,因此按兩下 [ 完成 ] 以建立新的 MFC 專案。

在 Visual Studio 2017 或更早版本中建立 MFC 專案

  1. 使用 MFC 應用程式精靈 建立新的 MFC 應用程式。 若要執行精靈,請從 [ 檔案 ] 功能選取 [ 新增],然後選取 [ 專案]。 [ 新增專案 ] 對話框隨即顯示。

  2. 在 [新增專案] 對話框中,展開 [專案類型] 窗格中的 [Visual C++] 節點,然後選取 [MFC]。 然後,在 [ 範本] 窗格中,選取 [MFC 應用程式]。 輸入項目的名稱,例如 MFCShellControls ,然後按下 [ 確定]。

    在 [MFC 應用程式精靈] 顯示之後,請使用下列選項:

    1. 在 [ 應用程式類型 ] 窗格的 [ 應用程式類型] 底下,清除 [ 索引卷標式檔 ] 選項。 接下來,選取 [單一檔 ],然後選取 [文件/檢視架構支援]。 在 [項目樣式] 底下,選取 [Visual Studio],然後從 [ 視覺效果樣式和色彩 ] 下拉式清單中選取 [Office 2007 (藍色主題]

    2. 在 [ 複合文件支援] 窗格中,選取 [無]。

    3. 請勿對 [ 文件範本字串 ] 窗格進行任何變更。

    4. 在 [ 資料庫支援 ] 窗格 (Visual Studio 2015 和更舊版本)上,選取 [ ],因為應用程式不會使用資料庫。

    5. 在 [ 使用者介面功能] 窗格中,確定已選取 [ 使用功能表欄和工具列 ] 選項。 保留所有其他選項原樣不變。

    6. 在 [ 進階功能] 窗格的 [ 進階功能] 下,只選取 [ActiveX 控件 ] 和 [ 通用控件指令清單]。 在 [ 進階框架] 窗格下,只選取 [瀏覽窗格] 選項。 這會使精靈在視窗的左側建立一個已經內嵌了 CMFCShellTreeCtrl 的窗格。

    7. 我們不會對 [產生的類別 ] 窗格進行任何變更,因此按兩下 [ 完成 ] 以建立新的 MFC 專案。

藉由建置並執行應用程式,確認應用程式已成功建立。 若要建置應用程式,請從 [ 置] 功能選取 [ 建置方案]。 如果應用程式建置成功,請從 [偵錯] 功能表中選取 [開始偵錯] 來執行應用程式。

精靈會自動建立具有標準功能表欄、標準工具列、標準狀態列,以及視窗左側的 Outlook 列,以及 資料夾檢視行事曆 檢視的應用程式。

將 shell 清單控制項新增至文件檢視

  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();
    

    接下來,在 Solution Explorer 中按兩下以開啟 MainFrm.cpp 來源檔案。 在該檔案底部,新增下列方法定義:

    CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl()
    {
         return m_wndTree;
    }
    
  3. 現在,我們會更新 類別 CMFCShellControlsView 來處理 WM_CREATE Windows 訊息。 開啟 [ 類別檢視] 視窗,然後選取類別 CMFCShellControlsView 。 按一下滑鼠右鍵,然後選取 [屬性]

    接下來,在 [類別精靈] 中,按兩下 [ 訊息 ] 索引標籤。向下捲動直到您找到 WM_CREATE 訊息為止。 從 旁邊的 WM_CREATE下拉式清單中,選取 <[新增> 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. 最後一個步驟是使用 CMFCShellTreeCtrl 方法連接 CMFCShellListCtrl 物件。 呼叫 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 類別呼叫方法,因此必須在MFCShellControlsView.cpp原始程式檔頂端新增 #include 指示詞:

    #include "MainFrm.h"
    
  6. 藉由建置並執行應用程式,確認應用程式已成功建立。 若要建置應用程式,請從 [ 置] 功能選取 [ 建置方案]。 如果應用程式建置成功,請從 [偵錯] 功能表中選取 [開始偵錯] 來執行它。

    您現在應該會在檢視窗格中看到所選取 CMFCShellTreeCtrl 專案的詳細數據。 當您按下 中的 CMFCShellTreeCtrl節點時, CMFCShellListCtrl 會自動更新 。 同樣地,如果您雙擊 CMFCShellListCtrl 資料夾,CMFCShellTreeCtrl 應該會自動更新。

    使用滑鼠右鍵按一下樹狀控制項或清單控制項中的任何項目。 您會取得與使用實際檔案總管時相同的內容功能表。

後續步驟

  • 精靈會建立 Outlook 列,其中包含 [ 資料夾 ] 窗格和 [ 行事曆 ] 窗格。 在 [檔案總管] 視窗中設定 [行事曆] 窗格似乎不太合理,因此現在請移除該窗格。

  • 支援 CMFCShellListCtrl 以不同的模式檢視檔案,例如 大型圖示小型圖示清單詳細數據。 更新您的應用程式以實作這項功能。 提示:請參閱 Visual C++ 範例

另請參閱

逐步解說