Как различить тип папки (Windows / FTP) в MFC (VC ++)? - PullRequest
0 голосов
/ 24 ноября 2010

как отличить тип папки (Windows / FTP) в MFC (VC ++)?В моем случае у меня есть MFC Treeview, в котором я добавляю список папок, поступающих с сервера, это папки Windows и CIFS. Теперь я хочу внутренне разграничить тип папок, потому что я выбираю какую-то папку и говорю «подключить», затемна страницу входа, где мне нужно войти в учетные данные, но перед этим мне нужно различить, что это за тип папки?

Любое свойство древовидной структуры, такое как настройка и получение ключа или любой другой подход.Заранее спасибо.

Я получаю список папок с сервера в этом формате том 1 / Папка 1, том 2 / Папка 2 || Папка 3, Папка 4 в этом методе ниже я удаляю «||»и поддержание их в двух разных переменных: strDataFolder содержит - Папки FTP и папки strNAS содержат папку CIFS, затем еще один метод, который я использую UpdateFolder.Если это FTP, то напрямую добавьте, но если это CIFS, проверьте на дублирование, если эта папка уже существует, не добавляйте ее снова в древовидную структуру.

Теперь я не могу понять, как они различают тип папок?

void CNDSClientDlg::UpdateSharedFolder(CString strNASfolders,HTREEITEM hChildItem)
{
    CString strDataFolder = "";
    CString strData = "";       

    int iPos = 0;
    int fPosition = 0;

    fPosition = strNASfolders.Find("||");           
    if(fPosition != -1)
    {
        strDataFolder = strNASfolders.Mid(0,fPosition);
        strNASfolders = strNASfolders.Right(strNASfolders.GetLength()-(fPosition+2));   

    }
    else
    {
       strDataFolder = strNASfolders;
    }

    if (strDataFolder != "" )
    {
         UpdateFolders(strDataFolder,hChildItem,false);

    }
    if (strNASfolders != "" )        //don't add if already exist
    {
        UpdateFolders(strNASfolders,hChildItem,true);
    }

}

void CNDSClientDlg::UpdateFolders(CString strFolderType,HTREEITEM hChildItem,bool bCheck)
{
        int iPos = 0 ;      
        CString strData = "";
        CString strCurrFolder ="";
        HTREEITEM HShareFolder = NULL;
        bool bFound = false ;
        while (iPos != -1)
        {
            iPos = strFolderType.Find(","); 



        if (iPos != -1)
        {               
             strData = strFolderType.Mid(0,iPos);//get the folder details
        }
        else
        {
            strData = strFolderType;//get the last folder details
        }

        strFolderType = strFolderType.Right(strFolderType.GetLength()-(iPos+1)); //get remaining data
        int fPos = strData.ReverseFind('/');
        if (fPos != -1)
        {
            strCurrFolder = strData.Mid(fPos+1,strData.GetLength());    // get required data                                

        }
        else
        {
            strCurrFolder = strData; //else assign all the data 
        }

         if(bCheck == true)
         {
            bFound = false ;
            HTREEITEM hTempItem = NULL;
            CString strItemText = "" ;
            hTempItem = m_pTreeview->GetChildItem(hChildItem);
            strItemText = m_pTreeview->GetItemText(hTempItem);
            while(hTempItem != NULL)
            {
                if(strItemText != strCurrFolder) 
                {
                    strItemText = m_pTreeview->GetItemText(hTempItem);
                    hTempItem = m_pTreeview->GetNextSiblingItem(hTempItem);
                }
                else
                {
                    bFound = true;
                    break;
                }
            }


         }
        if(bCheck == false || bFound == false)
         {

                HShareFolder = m_pTreeview->InsertItem(strCurrFolder,hChildItem);                   
                m_pTreeview->SetItemImage(HShareFolder,2,2);
                TTipItemData* pToolTipData ; 
                pToolTipData  = new TTipItemData; 
                pToolTipData->strTool = strData ;                                                                
                m_pTreeview->SetItemData(HShareFolder,DWORD(pToolTipData));

            }

         m_pTreeview->Expand(hParentItem,TVE_EXPAND);
         m_pTreeview->EnsureVisible(hParentItem);



    }

}

1 Ответ

1 голос
/ 24 ноября 2010

Элементы в древовидных представлениях могут иметь произвольные данные, связанные с ними. Проверить:

http://msdn.microsoft.com/en-us/library/ettyybhw(VS.80).aspx

Показанный здесь метод InsertItem имеет параметр LPARAM. Это для вашего использования, и вы можете установить это значение, которое имеет значение для вашего приложения.

(РЕДАКТИРОВАТЬ: в качестве альтернативы используйте одну из наименее извилистых перегрузок для вставки вашего элемента и используйте CTreeCtrl::SetItemData на дескрипторе, который возвращается впоследствии).

Чтобы узнать, какое значение связано с вашим предметом, используйте CTreeCtrl::GetItemData.

Незначительный Пример:

HTREEITEM hItem = m_ctrlTree.InsertItem("My Item", TVI_ROOT);
HTREEITEM hOther = m_ctrlTree.InsertItem("Child Item", hItem);
m_ctrlTree.SetItemData(hItem, static_cast<DWORD_PTR>(10)); // set LPARAM to 10

// note, you can also store pointers!  This assumes pObj is some kind of instance
// of a class.
m_ctrlTree.SetItemData(hOther, static_cast<DWORD_PTR>(pObj));


// at a later point:
int myVal = static_cast<int>(m_ctrlTree.GetItemData(hItem));
MyObject* pObj = static_cast<MyObject*>(m_ctrlTree.GetItemData(hOther));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...