|
ツリービューの基本
ツリービューは、SDI/MDIベースのアプリでツリーコントロールを元にリスト表示をするビューです。
まずはツリービューとツリーコントロールの違いを明確にしておきましょう。ツリービューはドキュメント・ビュー・アーキテクチャにおけるビューの一種です。ツリーコントロールはダイアログのコントロールの一種です。ツリービューを使う場合、ツリーの実際の操作はCTreeView::GetTreeCtrl()関数でツリーコントロールを取得し、CTreeCtrlクラスを使って行います。ツリービューは内部にツリーコントロールを保持しているだけと考えればいいでしょう。
では、実際に作ってみます。今回はSDIで作成します。アプリケーションウィザードで「ドキュメントの種類」に「シングルドキュメント」を選択します。そして、「生成されたクラス」ページでビューの基本クラスに「CTreeView」を選択します。これで、初期作成されるビューがCTreeViewの派生クラスになります。

では、クラスビューで確認してみます。作成されたビュークラスがCTreeViewの派生クラスになっていることがわかります。

それでは、コードを追加していきましょう。ビューの初期化処理はOnInitialUpdate()関数に記述します。
void CTVView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
{
CTreeCtrl &treeCtrl = GetTreeCtrl();
HTREEITEM hItem = NULL;
int err = 0;
// アイテム挿入
if (!err) if ((hItem = treeCtrl.InsertItem
(_T("乗り物"), TVI_ROOT)) == NULL) err = 1;
if (!err) if (!treeCtrl.InsertItem(_T("バス"), hItem)) err = 1;
if (!err) if (!treeCtrl.InsertItem(_T("飛行機"), hItem)) err = 1;
if (!err) if ((hItem = treeCtrl.InsertItem
(_T("電車"), hItem)) == NULL) err = 1;
if (!err) if (!treeCtrl.InsertItem(_T("山手線"), hItem)) err = 1;
}
}
|
ツリーの操作はCTreeCtrlクラスを使って行います。CTreeCtrlのオブジェクトはCTreeView::GetTreeCtrl()関数で取得できます。
ここではアイテムを挿入しています。ツリーコントロールへのアイテムの挿入は「ツリーコントロールの基本」でやりました。この部分は同じなので詳細はそちらを見てください。
さて、ツリーコントロールは初期状態だとアイテム間の線や+-ボタンは表示されません。これを表示させたい場合はどうすればいいでしょうか。ダイアログの場合はリソースエディタ上のプロパティで設定できましたが、ビューの場合はリソースはないのでプログラム上で設定しないといけません。
ツリーコントロールにスタイルを設定する場合は、通常はCTreeCtrl::Create()関数の引数でスタイルを設定しますが、ビューの場合はOnInitialUpdate()の段階ではすでにツリーコントロールが作成されているので、後からスタイルを設定するということができません。
こういう場合は、CWnd::Create()関数をオーバーライドして、スタイルを追加します。ツリービューのプロパティからCreate()関数をオーバーライドします。

BOOL CTVView::Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect,
CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
{
dwStyle |= TVS_HASBUTTONS;
dwStyle |= TVS_HASLINES;
}
return CTreeView::Create(lpszClassName, lpszWindowName,
dwStyle, rect, pParentWnd, nID, pContext);
}
|
dwStyleにTVS_HASBUTTONS、TVS_HASLINESを追加します。これでツリーコントロールのアイテム間の線と+-ボタンが表示されるようになります。
ではビルドして実行してみましょう。ツリーコントロールのアイテムがビューに表示されました。

|