ファイルをバイナリ形式で表示する (C/C++編)
ディレクトリツリー・ビュー、ファイル一覧表示ビューおよび、ファイルデータ表示ビューの各生成と初期化を行います。
ディレクトリツリー・ビューは、MFCのツリーコントロール CTreeView クラスを派生させて作ります。
ファイル一覧表示ビューは、MFCのツリーコントロール CListView クラスを派生させて作ります。
ファイルデータ表示ビューは、MFCのツリーコントロール CView クラスを派生させて作ります。
ビューを生成する為に、Create()メソッドをオーバーライドします。
「クラスウィザード」を開いて、「CFileTreeView」クラスに「仮想関数」タブから「Create」を選択して仮想関数「Create()」を追加します。
ディレクトリツリー・ビューのウインドウ作成時に、ツリーコントロールにアイテム間の線と+-ボタンを表示するようにするためにスタイルの指定を追加します。
ソースコード [FileTreeView.cpp]
	
/****************************************************************************/
/*!
 *  @brief  ディレクトリツリー・ビューを生成する.
 *
 *  @param  [in]    lpszClassName   ウインドウ・クラス名のポインタ.
 *  @param  [in]    lpszWindowName  ウインドウの表示名のポインタ.
 *  @param  [in]    dwStyle         ウインドウ・スタイル.
 *  @param  [in]    rect            ウインドウのサイズ.
 *  @param  [in]    pParentWnd      親ウインドウのオブジェクト.
 *  @param  [in]    nID             ウインドウID.
 *  @param  [in]    pContext        CCreateContext構造体のポインタ.
 *
 *  @retval TRUE = OK. / FALSE = NG.
 */
BOOL CFileTreeView::Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
                                    const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext )
{
    //! ツリーコントロールにアイテム間の線と+-ボタンを表示する.
    dwStyle |= TVS_HASLINES;
    dwStyle |= TVS_HASBUTTONS;
    //! 最後に基本クラスのメソッドを呼び出す.
    return CTreeView::Create( lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext );
}
	
	ビューを初期化する為に、OnInitialUpdate()メソッドをオーバーライドします。
「クラスウィザード」を開いて、「CFileTreeView」クラスに「仮想関数」タブから「OnInitialUpdate」を選択して仮想関数「OnInitialUpdate()」を追加します。
ディレクトリツリーの初期化処理では、最初にルートノードにコンピュータ名を登録します。
次にルートノードの子ノードとしてドライブ名のリストを登録します。
最後にルートノードを展開表示します。
ソースコード [FileTreeView.cpp]
	
/****************************************************************************/
/*!
 *  @brief  ディレクトリツリー・ビューを初期化する.
 *
 *  @param  なし.
 *
 *  @retval なし.
 */
void CFileTreeView::OnInitialUpdate()
{
    //! 最初に基本クラスのメソッドを呼び出す.
    CTreeView::OnInitialUpdate();
    CTreeCtrl& treeCtrl = GetTreeCtrl();
    //! コンピュータ名をツリーのルートノードにセットする.
    HTREEITEM hRoot = AddRootNode( treeCtrl );
    if( hRoot == NULL ){
        return;
    }
    //! ドライブ名をツリーに登録する.
    AddDriveName( treeCtrl, hRoot );
    //! ルートノードを展開して表示する.
    treeCtrl.Expand( hRoot, TVE_EXPAND );
}
	
	ビューを生成する為に、Create()メソッドをオーバーライドします。
「クラスウィザード」を開いて、「CFileListView」クラスに「仮想関数」タブから「Create」を選択して仮想関数「Create()」を追加します。
ファイル一覧ビューのウインドウ作成時に、リストの表示形式を「詳細リスト」になるようにスタイルの指定を追加します。
ソースコード [FileListView.cpp]
	
/****************************************************************************/
/*!
 *  @brief  ファイル一覧のビューを生成する.
 *
 *  @param  [in]    lpszClassName   ウインドウ・クラス名のポインタ.
 *  @param  [in]    lpszWindowName  ウインドウの表示名のポインタ.
 *  @param  [in]    dwStyle         ウインドウ・スタイル.
 *  @param  [in]    rect            ウインドウのサイズ.
 *  @param  [in]    pParentWnd      親ウインドウのオブジェクト.
 *  @param  [in]    nID             ウインドウID.
 *  @param  [in]    pContext        CCreateContext構造体のポインタ.
 *
 *  @retval TRUE = OK. / FALSE = NG.
 */
BOOL CFileListView::Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
                                const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext )
{
    //! リストの表示形式を「詳細リスト」にする.
    dwStyle |= LVS_REPORT;
    //! 最後に基本クラスのメソッドを呼び出す.
    return CListView::Create( lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext );
}
	
	ビューを初期化する為に、OnInitialUpdate()メソッドをオーバーライドします。
「クラスウィザード」を開いて、「CFileListView」クラスに「仮想関数」タブから「OnInitialUpdate」を選択して仮想関数「OnInitialUpdate()」を追加します。
リストビューのカラムを設定します。
| カラム位置 | カラム名 | 表示位置 | カラムの幅 | 
| 1 | ファイル名 | 左詰め | 250 | 
| 2 | サイズ | 右詰め | 100 | 
| 3 | 更新日時 | 左詰め | 150 | 
ソースコード [FileListView.cpp]
	
/****************************************************************************/
/*!
 *  @brief  ファイル一覧のビューを初期化する.
 *
 *  @param  なし.
 *
 *  @retval なし.
 */
void CFileListView::OnInitialUpdate()
{
    //! 最初に基本クラスのメソッドを呼び出す.
    CListView::OnInitialUpdate();
    CListCtrl& listCtrl = GetListCtrl();
    //! リストのカラムを設定する.
    LVCOLUMN lvcol;
    lvcol.mask     = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    lvcol.cx       = 250;
    lvcol.pszText  = _T("ファイル名");
    lvcol.iSubItem = 0;
    lvcol.fmt      = LVCFMT_LEFT;
    listCtrl.InsertColumn( 0, &lvcol );
    lvcol.cx       = 100;
    lvcol.pszText  = _T("サイズ");
    lvcol.iSubItem = 1;
    lvcol.fmt      = LVCFMT_RIGHT;
    listCtrl.InsertColumn( 1, &lvcol );
    lvcol.cx       = 150;
    lvcol.pszText  = _T("更新日時");
    lvcol.iSubItem = 2;
    lvcol.fmt      = LVCFMT_LEFT;
    listCtrl.InsertColumn( 2, &lvcol );
}
	
	ビューを生成する為に、Create()メソッドをオーバーライドします。
「クラスウィザード」を開いて、「CFileDataView」クラスに「仮想関数」タブから「Create」を選択して仮想関数「Create()」を追加します。
ファイルデータ・ビューのウインドウ作成時に、スクロールバーを表示するようにスタイルの指定を追加します。
スクロールバーのヘルパークラスにファイルデータ・ビューのクラスを紐づけます。
ソースコード [FileDataView.cpp]
	
/****************************************************************************/
/*!
 *  @brief  ビューを生成する.
 *
 *  @param  [in]    lpszClassName   ウインドウ・クラス名のポインタ.
 *  @param  [in]    lpszWindowName  ウインドウの表示名のポインタ.
 *  @param  [in]    dwStyle         ウインドウ・スタイル.
 *  @param  [in]    rect            ウインドウのサイズ.
 *  @param  [in]    pParentWnd      親ウインドウのオブジェクト.
 *  @param  [in]    nID             ウインドウID.
 *  @param  [in]    pContext        CCreateContext構造体のポインタ.
 *
 *  @retval TRUE = OK. / FALSE = NG.
 */
BOOL CFileDataView::Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, 
                                const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext )
{
    //! ウインドウにスクロールバーを表示する.
    dwStyle |= WS_VSCROLL;
    dwStyle |= WS_HSCROLL;
    //! スクロールバーのラッパークラスにウインドウを紐づけする.
    m_ScrollV.Bind( this, SB_VERT );
    m_ScrollH.Bind( this, SB_HORZ );
    //! 最後に基底クラスのメソッドを呼び出す.
    return CView::Create( lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext );
}
	
	




