2017-02-06 14 views
-4

にチェックされた項目を表示したい私は今、私は、配列がチェック値が含まれていますが、私は最後の時間をチェックしているかを知っていますか、この私は最後に、ツリーコントロール、MFC

void GetCheckedItems(const CTreeCtrl& tree, CArray<HTREEITEM> *checkedItems, HTREEITEM startItem = NULL) 
{ 
    if (startItem == NULL) 
     startItem = tree.GetRootItem();` 

    for (HTREEITEM item = startItem; item != NULL; item = tree.GetNextItem(item, TVGN_NEXT)) 
    { 
     // figure out if this item is checked or not 
     UINT state = (tree.GetItemState(item, TVIS_STATEIMAGEMASK) >> 12) & 15; 

     if (state == 2) 
     checkedItems->Add(item); 

     // deal with children if present 
     HTREEITEM child = tree.GetNextItem(item, TVGN_CHILD); 

     if (child != NULL) 
     GetCheckedItems(tree, checkedItems, child); 
    } 
} 

を試してみました。

+0

私はダイアログで1つのツリーコントロールを持っていると私はいくつかのノードとリーフを追加して、最近私は最近チェックされた1つの特定のアイテムを取得したい –

答えて

0

TVN_ITEMCHANGEDにハンドラを使用するだけです。アイテムの状態が変化しているときに呼び出されます。

変更された状態フラグを確認する必要があります。 TVIS_STATEIMAGEMASKの変更を検出できます。

0
CString m; 
    HTREEITEM selItem; 
    selItem=m_treeRel.GetSelectedItem(); 
    UINT uFlags = 0; 
    CPoint pt(0, 0); 
    GetCursorPos(&pt); 
    m_treeRel.ScreenToClient(&pt); 
    HTREEITEM hItem = m_treeRel.HitTest(pt, &uFlags); 
    if(NULL != hItem && (TVHT_ONITEM & uFlags)) 
    { 
     /*if(selItem == hItem) 
     { 
      m=_T("Selected Item...."); 
     } 
     else */ 
     if(!m_treeRel.GetCheck(hItem)) 
     { 
      m=m_treeRel.GetItemText(hItem); 
      //m_treeRel.SetCheck(hItem,true); 
     } 
     else 
     { 
      //m=_T("ERROR"); 
      //m_treeRel.SetCheck(hItem,false); 
     } 
    } 
    ShowMessage(m); 
    *pResult = 0; 

私は前回チェックしたアイテムを見つけるために....!

関連する問題