いくつかの値が設定されているツリー コントロールがありました。このいくつかのツリー ノードでは、チェック ボックスで構成されているのに対し、チェック ボックスで構成されているノードはほとんどありません。私の問題は、最初にツリーが列挙されるとき、デフォルトの選択は最初のルートノードであり、このルートノードは3つの子で構成され、各子はチェックボックスで構成されます。これが私の問題です。
ツリーを展開して、チェックボックスで構成される子アイテムをクリックしようとすると(チェックボックスをクリック)、マウスの左ボタンを押すまで、チェックしているアイテムにフォーカスが移動し、左ボタンをクリックすると、選択がルート項目 (または以前に選択されていた項目) に戻っています。
これを解決するために、これは私が試したものです。
//TVN_ITEMCHANGED
void CDriverSetupView::OnTvnItemChangedTree(NMHDR *pNMHDR, LRESULT *pResult)
{
NM_TREEVIEW* pNewTreeView = (NM_TREEVIEW*)pNMHDR;
if(NULL != pNewTreeView->itemNew.hItem)
{
m_TreeCtrl.Select(pNewTreeView->itemNew.hItem,TVGN_CARET | TVGN_FIRSTVISIBLE | TVGN_DROPHILITE);
m_TreeCtrl.SelectItem(pNewTreeView->itemNew.hItem);
m_TreeCtrl.SelectDropTarget(pNewTreeView->itemNew.hItem);
}
}
私がこのようにしていれば、私がチェックしている子が何であれ、すべてがクールであることを選択することができます。しかし、最初にアプリケーションを起動すると、ツリーが展開され、選択がルート項目にないため、最後の項目に移動します。
理解を深めるために下の画像を見つけてください。 OnTvnItemChangedTree のコード部分なしでツリーを列挙すると、ツリーは次のようになります。
最初のチェックボックスでマウスの左ボタンを押すと、選択がチェックボックス項目に変わったように見えます。
チェックボックスでマウスの左ボタンを押すと、選択が再び前のノードに戻ります。
OnTvnItemChangedTree 内のコードを使用すると、チェックされたノードを選択できますが、最初にアプリケーションを起動すると、ツリーが展開され、次のように最後の子項目が選択されます。
上の画像では、必要なものを取得できますが、ツリーが展開され、選択が最後の項目になっています。これはpNewTreeView->itemNew.hItem
、初期化後、その項目が最後の項目へのハンドルを構成するためであることがわかっていますが、最初にツリーが展開されず、ノードをチェックしたときに選択が適切に機能し、選択がチェックされたアイテムに変更されるようにするにはどうすればよいですか。
ルートアイテムとツリーに選択を残す方法を教えてください。初期ステータスは展開されていないはずです。