共用方式為


逐步解說:使用新的 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 列,以及資料夾 檢視和 行事曆 檢視的應用程式。

將殼層清單控制項新增至檔檢視

  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 訊息。 開啟 [ 類別檢視] 視窗,然後選取類別 CMFCShellControlsView 。 按一下滑鼠右鍵並選取 [內容]

    接下來,在 [類別精靈] 中 ,按一下 [ 訊息 ] 索引標籤。向下捲動直到您找到訊息 WM_CREATE 為止。 從 旁邊的 WM_CREATE 下拉式清單中,選取 < [新增 > OnCreate ]。 命令會為我們建立訊息處理常式,並自動更新 MFC 訊息對應。

    在 方法中 OnCreate ,我們現在會建立 物件 CMFCShellListCtrlOnCreate在 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::SetRelatedList 方法連接 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 類別呼叫方法,因此必須在 MFCShellControlsView.cpp 原始程式檔頂端新增 #include 指示詞:

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

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

    以滑鼠右鍵按一下樹狀控制項或清單控制項中的任何專案。 您會取得與實際 檔案總管 相同的操作功能表。

下一步

  • 精靈會建立 Outlook 列,其中包含 [資料夾 ] 窗格和 [ 行事曆 ] 窗格。 在 [總 管] 視窗中擁有 [ 行事曆 ] 窗格 可能沒有意義,因此現在請移除該窗格。

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

另請參閱

逐步解說