// RemoteComboBox.cpp : implementation file // #include "stdafx.h" #include "ConsoleApp.h" #include "RemoteComboBox.h" #include "MainFrm.h" #include "RemoteView.h" #include "RemoteTreeCtrl.h" #include ".\remotecombobox.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CRemoteComboBox CRemoteComboBox::CRemoteComboBox() { m_iSPos = m_iEPos = -1; } CRemoteComboBox::~CRemoteComboBox() { } BEGIN_MESSAGE_MAP(CRemoteComboBox, CComboBoxEx) //{{AFX_MSG_MAP(CRemoteComboBox) //}}AFX_MSG_MAP ON_WM_CREATE() ON_CONTROL_REFLECT(CBN_SELCHANGE, OnSelchange) // ON_NOTIFY_REFLECT(CBEN_ENDEDIT, OnCbenEndedit) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CRemoteComboBox message handlers int CRemoteComboBox::OnCreate(LPCREATESTRUCT lpCreateStruct) { // if (CComboBox::OnCreate(lpCreateStruct) == -1) // return -1; SHFILEINFO shfi; HIMAGELIST hil = (HIMAGELIST)SHGetFileInfo("C:\\", 0, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_SMALLICON); SetImageList(CImageList::FromHandle(hil)); return 0; } void CRemoteComboBox::OnSelchange() { CRemoteTreeCtrl *ptree = ((CRemoteView*)GetParent())->GetTreeCtrl(); ptree->SelectItem((HTREEITEM)GetItemData(GetCurSel())); } void CRemoteComboBox::Init() { Clear(); CRemoteTreeCtrl *ptree = ((CRemoteView*)GetParent())->GetTreeCtrl(); COMBOBOXEXITEM cbei; cbei.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_INDENT; int nImage, nSelectedImage; CString sText; // ·çÆ® »ðÀÔ HTREEITEM hti = ptree->GetRootItem(); ptree->GetItemImage(hti, nImage, nSelectedImage); sText = ptree->GetItemText(hti); cbei.iItem = GetCount(); cbei.iIndent = 0; cbei.iImage = nImage; cbei.iSelectedImage = nSelectedImage; cbei.pszText = (LPSTR)(LPCTSTR)sText; InsertItem(&cbei); SetItemData((int)cbei.iItem, (DWORD_PTR)hti); // º¼·ý »ðÀÔ hti = ptree->GetChildItem(hti); while (hti) { ptree->GetItemImage(hti, nImage, nSelectedImage); sText = ptree->GetItemText(hti); cbei.iItem = GetCount(); cbei.iIndent = 1; cbei.iImage = nImage; cbei.iSelectedImage = nSelectedImage; cbei.pszText = (LPSTR)(LPCTSTR)sText; InsertItem(&cbei); SetItemData((int)cbei.iItem, (DWORD_PTR)hti); hti = ptree->GetNextSiblingItem(hti); } SetCurSel(0); } void CRemoteComboBox::Add(HTREEITEM hti) { COMBOBOXEXITEM cbei; if (m_iSPos >= 0 && m_iEPos >= 0) { for (int i = m_iEPos; i >= m_iSPos; i--) DeleteItem(i); } m_iSPos = m_iEPos = -1; CRemoteTreeCtrl *ptree = ((CRemoteView*)GetParent())->GetTreeCtrl(); PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)ptree->GetItemData(hti); if (prti->nClass != TNS_FOLDER) { for (int i = 0; i < GetCount(); i++) { if ((HTREEITEM)GetItemData(i) == hti) { SetCurSel(i); break; } } return; } HTREEITEM htiParent = ptree->GetVolumeItem(hti); int nImage, nSelectedImage; CString sText; cbei.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_INDENT; for (int i = 1; i < GetCount(); i++) { if ((HTREEITEM)GetItemData(i) != htiParent) continue; m_iSPos = m_iEPos = i + 1; int iIndent = 2; while (htiParent != hti) { HTREEITEM htiChild, htiTemp = hti; while (htiParent != htiTemp) { htiChild = htiTemp; htiTemp = ptree->GetParentItem(htiChild); } ptree->GetItemImage(htiChild, nImage, nSelectedImage); sText = ptree->GetItemText(htiChild); cbei.iItem = m_iEPos++; cbei.iIndent = iIndent++; cbei.iImage = nImage; cbei.iSelectedImage = nSelectedImage; cbei.pszText = (LPSTR)(LPCTSTR)sText; InsertItem(&cbei); SetItemData((int)cbei.iItem, (DWORD_PTR)htiChild); htiParent = htiChild; } m_iEPos--; SetCurSel(m_iEPos); break; } } BOOL CRemoteComboBox::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN) { if (SetDirectPath() == FALSE) return FALSE; } return CComboBoxEx::PreTranslateMessage(pMsg); } BOOL CRemoteComboBox::SetDirectPath(void) { CString strTemp; CString strPath; CString token; int ipos=0; UINT ncount; HTREEITEM item=NULL; HCOMMLIB hcl; CRemoteTreeCtrl *ptree = ((CRemoteView*)GetParent())->GetTreeCtrl(); CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); CRemoteView *pView = (CRemoteView*)GetParent(); CRemoteListCtrl *pList = pView->GetListCtrl(); GetWindowText(strPath); strTemp = strPath; if (ptree->GetSelectedItem() == ptree->GetRootItem()) { if (pmf->m_mapHcl.GetCount() == 2) item = ptree->GetChildItem(ptree->GetRootItem()); else { MessageBox("¼­ºñ½º º¼·ýÀ» ¸ÕÀú ¼±ÅÃÇØ ÁÖ¼¼¿ä."); return FALSE; } } else { item = ptree->GetVolumeItem(ptree->GetSelectedItem()); // º¼·ý³ëµå } if (item == NULL) { MessageBox("Á¸ÀçÇÏÁö ¾Ê´Â º¼·ýÀÔ´Ï´Ù."); return FALSE; } pmf->m_mapHcl.Lookup(item,(void*&)hcl); PCLFILE_STRUCT pclf = cl_get_file_list(hcl,strTemp.Mid(ipos),0,&ncount); if( pclf == NULL) { MessageBox("Á¸ÀçÇÏÁö ¾Ê´Â °æ·Î ÀÔ´Ï´Ù."); return FALSE; } if(pclf->attr != CLFILEATTR_FOLDER) {// ÆÄÀÏÀÌ´Ù. strTemp = strTemp.Left(strTemp.ReverseFind('/')); } token = strTemp.Tokenize("/",ipos); // ù¹øÂ° °æ·Î while (token != "") { HTREEITEM titem = ptree->GetItem(item,token); if( titem == NULL) pView->AppendObject(item,true,token,0,""); item = ptree->GetItem(item,token); token= strTemp.Tokenize("/",ipos); }; ptree->SelectItem(item); /* if(pclf->attr != CLFILEATTR_FOLDER) { CString strName; strName = strPath.Mid(strPath.ReverseFind('/')+1); for (;;) { MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } ncount = pList->GetItemCount(); if(ncount > 1) break; } for (int i = 0; i < ncount; i++) { if (pList->GetItemText(i,0) == strName) { pList->SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); } } } */ return TRUE; }