TreeView_EnsureVisible

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を追加してみる。
Jiroの子としてSenjiroを追加してみる。

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

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

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

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

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

開くと、Senjiroが入ってる。
開くと、Senjiroが入ってる。

開くと、Senjiroが入ってる。
そこで、

TreeView_EnsureVisibleを最後に呼ぶようにすると、

ここでButton2を押すと、
ここでButton2を押すと、

ここでButton2を押すと、

即座に反映
即座に反映

即座に反映

Sample/winapi/TreeView_EnsureVisible/TreeView_EnsureVisible/src/TreeView_EnsureVisible at master · bg1bgst333/Sample · GitHub