void CXTPShellTreeCtrl::AssociateCombo(CWnd* pWnd) { CXTPShellTreeBase::AssociateCombo(pWnd); if (::IsWindow(pWnd->GetSafeHwnd())) { CString strSelectedPath; GetSelectedFolderPath(strSelectedPath); // make sure list gets updated. CXTPShellTreeBase::SelectionChanged( GetSelectedItem(), strSelectedPath); } }
void CCJShellTree::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; LPTVITEMDATA lptvid; //Long pointer to TreeView item data LPSHELLFOLDER lpsf2=NULL; HRESULT hr; SetRedraw(FALSE); //Do this only if we are not exiting the application... if (!m_bOutaHere) { lptvid=(LPTVITEMDATA)pNMTreeView->itemNew.lParam; if (lptvid) { hr=lptvid->lpsfParent->BindToObject(lptvid->lpi, 0,IID_IShellFolder,(LPVOID *)&lpsf2); if (SUCCEEDED(hr) && (m_bRefresh == false)) { // get the current directory. CString strFolderPath; GetSelectedFolderPath(strFolderPath); // get a handle to the currently selected item and set the // working directory. m_htiCurrent = pNMTreeView->itemNew.hItem; SetCurrentDirectory( strFolderPath ); if (m_pListCtrl->GetSafeHwnd()) { m_pListCtrl->PopulateListView(lptvid,lpsf2); lpsf2->Release(); } if( m_pComboBox->GetSafeHwnd( )) { int nFound = m_pComboBox->FindString(-1, strFolderPath); if (nFound == CB_ERR) { m_pComboBox->SetCurSel( m_pComboBox->AddString( strFolderPath )); } else { m_pComboBox->SetCurSel(nFound); } } } } } SetRedraw(); *pResult = 0; }