在本逐步解說中,您將建立類似檔案總管的應用程式。 您將建立具有兩個窗格的視窗。 左窗格會保存 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 列,以及 資料夾檢視 和 行事曆 檢視的應用程式。
將 shell 清單控制項新增至文件檢視
在本節中,您會將 的
CMFCShellListCtrl實例新增至精靈建立的檢視。 在解決方案總管中雙擊MFCShellControlsView.h,開啟檢視標頭檔案。定位
#pragma once指令於標頭檔案的頂端附近。 緊接在下方,新增以下程式碼來包含CMFCShellListCtrl的標頭檔案:#include <afxShellListCtrl.h>現在,新增 類型
CMFCShellListCtrl的成員變數。 首先,在頭檔中找出下列批注:// Generated message map functions緊接在該批注上方,新增下列程序代碼:
private: CMFCShellListCtrl m_wndList;MFC 應用程式精靈已在 類別中
CMFCShellTreeCtrl建立CMainFrame物件,但它是受保護的成員。 我們稍後會存取物件,因此現在請為其建立存取子。 在 方案總管 中連按兩下 MainFrm.h 標頭檔案以開啟它。 找出下列註出:// Attributes緊接在它底下,新增下列方法宣告:
public: CMFCShellTreeCtrl& GetShellTreeCtrl();接下來,在 Solution Explorer 中按兩下以開啟 MainFrm.cpp 來源檔案。 在該檔案底部,新增下列方法定義:
CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl() { return m_wndTree; }現在,我們會更新 類別
CMFCShellControlsView來處理WM_CREATEWindows 訊息。 開啟 [ 類別檢視] 視窗,然後選取類別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; }重複上一個步驟,但針對
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方法連接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++ 範例。