逐步解說:使用新的 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 專案
從主功能表,選擇 [檔案]> [新增]> [專案],以開啟 [建立新專案] 對話方塊。
在頂端的搜尋方塊中,輸入 MFC ,然後 從結果清單中選擇 MFC 應用程式 。
按一下 [下一步] 。 在下一頁中,輸入專案的名稱,並視需要指定專案位置。
選擇 [建立] 按鈕以建立專案。
在 [MFC 應用程式精靈 ] 顯示之後 ,請使用下列選項:
選擇左側的 [ 應用程式類型 ]。 然後選取 [單一檔 ],然後選取 [檔/檢視架構支援 ]。 在 [專案樣式] 底 下,選取 [Visual Studio ],然後從 [視覺效果樣式和色彩 ] 下拉式清單中選取 [Office 2007 (藍色主題] 。
在 [ 複合檔案支援 ] 窗格中,選取 [ 無 ]。
請勿對 [ 檔範本屬性 ] 窗格進行任何變更。
在 [ 使用者介面功能] 窗格中,確定已選取 [ 使用功能表列和工具列 ] 選項。 保留所有其他選項。
在 [進階功能] 窗格中,選取 [ ActiveX 控制項 ]、 [通用控制項資訊清單 ] 和 [流覽窗格] 選項。 將一切保留原樣。 導航 窗格 選項會導致精靈在視窗
CMFCShellTreeCtrl
左側建立已內嵌的窗格。我們不會對 [產生的類別 ] 窗格進行任何變更 ,因此按一下 [完成 ] 以建立新的 MFC 專案。
在 Visual Studio 2017 或更早版本中建立 MFC 專案
使用 MFC 應用程式精靈 建立新的 MFC 應用程式。 若要執行精靈,請從 [ 檔案 ] 功能表選取 [新增 ],然後選取 [ 專案 ]。 [新增專案 ] 對話方塊隨即顯示。
在 [ 新增專案] 對話方塊中,展開 [專案 類型 ] 窗格中的 [Visual C++ ] 節點,然後選取 [MFC ]。 然後,在 [ 範本] 窗格中,選取 [MFC 應用程式 ]。 輸入專案的名稱,例如
MFCShellControls
,然後按一下 [ 確定 ]。在 [MFC 應用程式精靈 ] 顯示之後 ,請使用下列選項:
在 [ 應用程式類型] 窗格的 [應用程式類型 ] 底下 ,清除 [ 索引標籤式檔 ] 選項。 接下來,選取 [單一檔 ],然後選取 [檔/檢視架構支援 ]。 在 [專案樣式] 底 下,選取 [Visual Studio ],然後從 [視覺效果樣式和色彩 ] 下拉式清單中選取 [Office 2007 (藍色主題] 。
在 [ 複合檔案支援 ] 窗格中,選取 [ 無 ]。
請勿對 [ 檔範本字串 ] 窗格進行任何變更。
在 [ 資料庫支援 ] 窗格 (Visual Studio 2015 和更舊版本)上,選取 [無 ],因為應用程式不會使用資料庫。
在 [ 使用者介面功能] 窗格中,確定已選取 [ 使用功能表列和工具列 ] 選項。 保留所有其他選項。
在 [進階功能] 窗格的 [進階功能 ] 下 ,只 選取 [ActiveX 控制項 ] 和 [通用控制項資訊清單 ]。 在 [ 進階框架] 窗格下 ,只選取 [ 流覽窗格] 選項。 這會導致精靈在視窗
CMFCShellTreeCtrl
左側建立已內嵌的窗格。我們不會對 [產生的類別 ] 窗格進行任何變更 ,因此按一下 [完成 ] 以建立新的 MFC 專案。
藉由建置並執行應用程式,確認應用程式已成功建立。 若要建置應用程式,請從 [ 建 置] 功能表選取 [ 建置方案 ]。 如果應用程式建置成功,請從 [偵錯] 功能表中選取 [開始 偵錯],以執行應用程式。
精靈會自動建立具有標準功能表列、標準工具列、標準狀態列,以及視窗左側的 Outlook 列,以及資料夾 檢視和 行事曆 檢視的應用程式。
將殼層清單控制項新增至檔檢視
在本節中,您會將 的
CMFCShellListCtrl
實例新增至精靈建立的檢視。 按兩下 方案總管 中的 MFCShellControlsView.h 開啟檢視標頭檔。#pragma once
在標頭檔頂端附近找出 指示詞。 緊接在下方,新增此程式碼以包含 的標頭檔CMFCShellListCtrl
:#include <afxShellListCtrl.h>
現在,新增 類型
CMFCShellListCtrl
的成員變數。 首先,在標頭檔中找出下列批註:// Generated message map functions
緊接在該批註上方,新增下列程式碼:
private: CMFCShellListCtrl m_wndList;
MFC 應用程式精靈 已在 類別中
CMainFrame
建立CMFCShellTreeCtrl
物件,但它是受保護的成員。 我們稍後會存取物件,因此現在請為其建立存取子。 按兩下方案總管 中的 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::SetRelatedList 方法連接
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"
藉由建置並執行應用程式,確認應用程式已成功建立。 若要建置應用程式,請從 [ 建 置] 功能表選取 [ 建置方案 ]。 如果應用程式建置成功,請從 [偵錯] 功能表選取 [開始 偵錯] 來執行它。
您現在應該會在檢視窗格中看到所選取
CMFCShellTreeCtrl
專案的詳細資料。 當您按一下 中的CMFCShellTreeCtrl
節點時,CMFCShellListCtrl
會自動更新 。 同樣地,如果您按兩下 中的CMFCShellListCtrl
資料夾,CMFCShellTreeCtrl
應該會自動更新 。以滑鼠右鍵按一下樹狀控制項或清單控制項中的任何專案。 您會取得與實際 檔案總管 相同的操作功能表。
下一步
精靈會建立 Outlook 列,其中包含 [資料夾 ] 窗格和 [ 行事曆 ] 窗格。 在 [總 管] 視窗中擁有 [ 行事曆 ] 窗格 可能沒有意義,因此現在請移除該窗格。
支援
CMFCShellListCtrl
以不同的模式檢視檔案,例如 大型圖示 、 小型圖示 、 清單 和 詳細資料 。 更新您的應用程式以實作這項功能。 提示:請參閱 Visual C++ 範例 。