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