1

私の問題は、次の関数が 2 回呼び出されることです。

ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &MainHamsterDlg::OnClickTree)

void MainHamsterDlg::OnClickTree(NMHDR* pNMHDR, LRESULT* pResult)
{
    CTreeCtrl* pCtrl = (CTreeCtrl*)GetDlgItem(IDC_TREE1);
    HTREEITEM hItem = pCtrl->GetSelectedItem();
    BOOL hItemm = pCtrl->ItemHasChildren(hItem);
    if (hItem && hItemm)
    {
        HTREEITEM hChild = pCtrl->GetChildItem(hItem);
        pCtrl->SelectItem(hChild);                           <--- Cause of the "loop"
    }

    *pResult = 1;
}

ツリーの子要素に自動的に移動するには、コードが必要です。(将来、選択されたものを検出するコードを書き、それによって何らかのアクションが発生するようにします。)

リーフをクリックすると、コードが正しく動作します。理由は次のとおりです。

if (hItem && hItemm)

次のことを保証します。

pCtrl->SelectItem(hChild);

実行されません。内部ノードがクリックされたときにコードを機能させるにはどうすればよいですか?

4

2 に答える 2