ファイルをバイナリ形式で表示する (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 );
}
	



商標に関する表示