戻る 第19章 コントロールの使用
(ツリービュー)
次へ

ソース 実行ファイル
sdk19.cpp sdk19.exe

今回はツリービューです。
エクスプローラーでお馴染みでフォルダの一覧表示に使われていますね。
階層図を視覚的に表現する場合に便利です。

今回もコモンコントロールなので
includeにcommctrl.hを追加しライブラリにcomctl32.libを
追加する必要がありますので忘れないでください。
スタイル 効果
TVS_HASBUTTON プラスとマイナスのボタンを表示します
TVS_HASLINE 項目の階層を破線で表示します
TVS_LINESATROOT ルートにある項目を破線で結びます
TVS_CHECKBOXESS 項目にチェックボックスをつけます
TVS_FULLROWSELECT 選択した項目を含む行がまるまる色が変わります
TVS_SINGLEEXPAND 展開されてそうでない項目は縮められます
TVS_TRACKSELECT マウスでポイントされている項目の色が変わり、下線がつきます
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg,WPARAM wP, LPARAM lP) { char str[T_BUFFER]; HTREEITEM trp[4];//ツリービューの親アイテム設定用 TV_INSERTSTRUCT tv;//ツリービューのアイテム設定用 HTREEITEM hItem;//選択項目取得時にハンドル保存用 TVITEM tvitem;//選択内容取得用 switch(msg){ case WM_CREATE: hTree = CreateWindowEx(0, WC_TREEVIEW, "", WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT, 0, 0, 0, 0, hwnd, (HMENU)ID_TREEVIEW, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); memset((char *)&tv, '\0', sizeof(tv)); //親アイテムを作成 tv.hInsertAfter = TVI_LAST; tv.item.mask = TVIF_TEXT; tv.hParent = TVI_ROOT; tv.item.pszText = "ぶ〜にゃん"; trp[0] = TreeView_InsertItem(hTree, &tv); tv.item.pszText = "つり〜びゅ〜"; trp[1] = TreeView_InsertItem(hTree, &tv); //親アイテムに挿入 tv.hParent = trp1; tv.item.pszText = "WinAPI"; trp[2] = TreeView_InsertItem(hTree, &tv); tv.item.pszText = "DirectX"; trp[3] = TreeView_InsertItem(hTree, &tv); //子アイテムに挿入 tv.hParent = trchild1; tv.item.pszText = "1"; TreeView_InsertItem(hTree, &tv); //子アイテムに挿入 tv.hParent = trchild1; tv.item.pszText = "2"; TreeView_InsertItem(hTree, &tv); //子アイテムに挿入 tv.hParent = trchild2; tv.item.pszText = "3"; TreeView_InsertItem(hTree, &tv); //子アイテムに挿入 tv.hParent = trchild2; tv.item.pszText = "4"; TreeView_InsertItem(hTree, &tv); break; case WM_SIZE: //ツリービューをウインドウ全体に表示 MoveWindow(hTree, 0, 0, LOWORD(lP), HIWORD(lP), TRUE); break; case WM_NOTIFY: switch (((NMHDR *)lP)->code) { case TVN_SELCHANGED://ツリービュー項目が選択された //選択されてる項目のハンドルを取得 hItem = TreeView_GetSelection(hTree); //GetItem用に設定する tvitem.mask=TVIF_HANDLE | TVIF_TEXT; tvitem.hItem=hItem; tvitem.pszText=str; tvitem.cchTextMax=T_BUFFER; //選択アイテムの情報を得る TreeView_GetItem(hTree,&tvitem); MessageBox(hwnd,str,"選択",MB_OK); break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wP, lP); } return 0; } 操作用のマクロ一覧(以後執筆中)
マクロ 効果
HTREEITEM TreeView_GetSelection(
HTREEITEM hTree//ツリービューのハンドル
)
選択されているツリー項目のハンドルを取得します
BOOL TreeView_GetItem(
HWND hwndTV,//ツリービューのハンドル
LPTVITEM pitem//取得する項目を保存する構造体
);
pitemにセットしたハンドルの項目内容を取得します
HTREEITEM TreeView_GetRoot(
HWND hwndTV//ツリービューのハンドル
);
最初の項目のハンドルを取得します