TreeView_EnsureVisibleで、追加した項目が表示されるように反映する。
TreeView_EnsureVisible マクロ (commctrl.h) - Win32 apps | Microsoft Learn
第114章
resource.hは、
とする。
TreeView_EnsureVisible.rcは、
とする。
TreeView_EnsureVisible.cppは、
// メニュー項目が選択されたり, ボタンなどのコントロールが押されたりして, コマンドが発生した時. case WM_COMMAND: // メニュー項目が選択されたり, ボタンなどのコントロールが押されたりして, コマンドが発生した時.(uMsgがWM_COMMANDの時.) // WM_COMMANDブロック { // どのコントロールかを判定する. switch (LOWORD(wParam)){ // LOWORD(wParam)でコントロールのリソースIDが取得できるので, その値で判定する. // Button1の時. case ID_BUTTON1: // ID_BUTTON1ブロック { // 変数の宣言・初期化 HWND hTree; // ツリービューのハンドルhTree. // ツリービューのハンドルを取得. hTree = GetDlgItem(hwndDlg, IDC_TREE1); // GetDlgItemでIDC_TREE1のハンドル取得. // 選択されたツリービューアイテムハンドルの取得と出力. HTREEITEM hItem = TreeView_GetSelection(hTree); // TreeView_GetSelectionでhItemを取得. TCHAR tszHItem[256] = {0}; _stprintf(tszHItem, _T("hItem = 0x%08x\n"), (unsigned long)hItem); OutputDebugString(tszHItem); // OutputDebugStringでhItemの値を出力. // アイテムを編集モードにする. TreeView_EditLabel(hTree, hItem); // TreeView_EditLabelでアイテムを編集モードにする. } // 既定の処理へ向かう. break; // breakで抜ける. // Button2の時. case ID_BUTTON2: // ID_BUTTON2ブロック { // 変数の宣言・初期化 HWND hTree; // ツリービューのハンドルhTree. TV_INSERTSTRUCT tvis = {0}; // TV_INSERTSTRUCT構造体tvisを{0}で初期化. // ツリービューのハンドルを取得. hTree = GetDlgItem(hwndDlg, IDC_TREE1); // GetDlgItemでIDC_TREE1のハンドル取得. // 選択されたツリービューアイテムハンドルの取得と出力. HTREEITEM hItem = TreeView_GetSelection(hTree); // TreeView_GetSelectionでhItemを取得. // アイテムの挿入. tvis.hInsertAfter = TVI_LAST; tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvis.hParent = hItem; HWND hEdit = GetDlgItem(hwndDlg, ID_EDIT_NAME); TCHAR tszText[256] = {0}; GetWindowText(hEdit, tszText, 256); tvis.item.pszText = tszText; tvis.item.iImage = 1; tvis.item.iSelectedImage = 1; HTREEITEM hNewItem = TreeView_InsertItem(hTree, &tvis); // TreeView_InsertItemでtvisを挿入. OutputDebugString(_T("TreeView_InsertItem!\n")); // OutputDebugStringで"TreeView_InsertItem!"を出力. } // 既定の処理へ向かう. break; // breakで抜ける. // 上記以外の時. default: // 既定の処理へ向かう. break; // breakで抜ける. } // 既定の処理へ向かう. break; // breakで抜ける. } // 抜ける. break; // breakで抜ける.
としてみる。

Jiroの子としてSenjiroを追加してみる。
Button2を押すと、

デバッグログには出てるけど、反映されてない。

Jiroを選択すると、開閉スイッチが出る。

開くと、Senjiroが入ってる。
そこで、
TreeView_EnsureVisibleを最後に呼ぶようにすると、

ここでButton2を押すと、

即座に反映