このチュートリアルでは、エクスプローラーに似たアプリケーションを作成します。 2 つのペインを含むウィンドウを作成します。 左側のウィンドウには、階層ビューでデスクトップを表示する 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 を選択し、[Visual スタイルと色] ドロップダウン リストから Office 2007 (青いテーマ) を選択します。
[ 複合ドキュメント サポート ] ウィンドウで、[ なし] を選択します。
[ドキュメント テンプレートのプロパティ] ウィンドウに変更を加えないでください。
[ ユーザー インターフェイス機能 ] ウィンドウで、[ メニュー バーとツール バーを使用 する] オプションが選択されていることを確認します。 他のすべてのオプションはそのままにします。
[ 高度な機能 ] ウィンドウで、[ ActiveX コントロール]、[ 共通コントロール マニフェスト]、[ ナビゲーション] ウィンドウ オプションの順に選択します。 それ以外はすべてのそのままにします ナビゲーション ウィンドウ オプションを使用すると、ウィンドウの左側にウィンドウが作成され、
CMFCShellTreeCtrlが既に埋め込まれています。[生成されたクラス] ウィンドウに変更を加えるつもりはないため、[完了] をクリックして新しい MFC プロジェクトを作成します。
Visual Studio 2017 以前で MFC プロジェクトを作成するには
MFC アプリケーション ウィザードを使用して、新しい MFC アプリケーションを作成します。 ウィザードを実行するには、[ ファイル ] メニューの [ 新規作成] を選択し、[ プロジェクト] を選択します。 [ 新しいプロジェクト ] ダイアログ ボックスが表示されます。
[新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] ウィンドウで [Visual C++] ノードを展開し、[MFC] を選択します。 次に、[テンプレート] ウィンドウ で [ MFC アプリケーション] を選択します。 プロジェクトの名前 (
MFCShellControlsなど) を入力し、[ OK] をクリックします。MFC アプリケーション ウィザードが表示されたら、次のオプションを使用します。
[ アプリケーションの種類 ] ウィンドウの [ アプリケーションの種類] で、[ タブ付きドキュメント ] オプションをオフにします。 次に、[ 単一ドキュメント ] を選択し、[ ドキュメント/アーキテクチャサポートの表示] を選択します。 [プロジェクト スタイル] で Visual Studio を選択し、[Visual スタイルと色] ドロップダウン リストから 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ウィンドウ メッセージを処理します。 [クラス ビュー] ウィンドウを開き、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::SetRelatedList メソッドを使用して、
CMFCShellTreeCtrlオブジェクトとCMFCShellListCtrlオブジェクトを接続します。CMFCShellTreeCtrl::SetRelatedListを呼び出すと、CMFCShellListCtrlはCMFCShellTreeCtrlで選択した項目の内容を自動的に表示します。 CView::OnActivateView からオーバーライドされる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++ サンプルを参照してください。