2010-11-24 13 views
0

MFC(VC++)でフォルダタイプ(Windows/FTP)を区別する方法は? 私の場合は、MFCツリービューを持っています。私は、サーバーからのフォルダーのリストを追加しています。そのフォルダーはWindowsとCIFSです。次に、内部的にどのタイプのフォルダーを区別したいのですか?私はログイン資格情報の詳細が必要なログインページを表示しますが、その前に私はどのタイプのフォルダを区別する必要がありますか?MFC(VC++)でフォルダタイプ(Windows/FTP)を区別する方法は?

設定やジエットキーなどのツリービューのプロパティ。 ありがとうございました。

この形式では、サーバーからフォルダーリストを取得します。この形式では、ボリューム1 /フォルダー1、ボリューム2 /フォルダー2 ||フォルダー3、 strDataFolder contains - FTP Foldersと strNASfoldersがCIFSフォルダをconatinsした後、もう1つの方法として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

ツリービュー内のアイテムは、それらに関連付けられた任意のデータを有することができます。チェックアウト:ここに示した

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

のInsertItemメソッドはLPARAMパラメータがあります。これはあなたの用途に適しており、アプリケーションに意味のある値に設定することができます。

(EDIT:または、最も複雑な過負荷の1つを使用してアイテムを挿入し、その後に返されるハンドルに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)); 
+1

'CTreeCtrlの:: SetItemData'あなたは項目が同じように動作し、挿入した後。 – djeidot

+0

@ djeidot +1。これは実際には、大きな構造体を使って周囲を吐くよりも簡単です。 –

+0

lparamの使い方を教えてもらえますか? –

関連する問題