Knowledge Base Nr: 00167 treectrl.cpp - http://www.swe-kaiser.de

MFC: CTreeCtrl snippets

  
//tree füllen
void CM3uExplorerDlg::DoFillTree()
{
m_tree.DeleteAllItems();

HTREEITEM ti;
HTREEITEM ti2;

CFileFind finder;
char szLine[200];
CString str, str2;

FILE* fp = fopen("E:/projects/internet/my_home/kaiserreich/cgi-bin/k_MusikCDdata.txt", "rt");
if (fp)
{
while (fgets(szLine, sizeof(szLine), fp))
{
//199#199# Frank Sinatra# "Thank you, Frank!"
chop(szLine);
str = szLine;

str2.Format("p:/musik/%s", (const char*)str.Left(3));
BOOL bFound = finder.FindFile(str2);
if (bFound) //mp3-verzeichnis existiert
{
int nPos1 = str.Find("# ");
int nPos2 = str.Find("# ", nPos1+2);
str2.Format("%s: %s", (const char*)str.Mid(nPos1+2, nPos2-nPos1-2)
, (const char*)str.Mid(nPos2+2) );

ti = m_tree.InsertItem(str2, TVI_ROOT, TVI_LAST);

int nCDNr = atoi((const char*)str.Left(3));
m_tree.SetItemData(ti, nCDNr);

/*
#EXTM3U
#EXTINF:-1, Lutz Goerner - Folgen der Trunksucht - Gernhardt
P:/musik/327/327_01_Lutz_Goerner_Gedichte_2_2.mp3
#EXTINF:-1, Lutz Goerner - Lob der Schwarzen Kirschen - Karsch
P:/musik/327/327_02_Lutz_Goerner_Gedichte_2_2.mp3
*/
str.Format("E:/projects/internet/my_home/kaiserreich/k_mp3lists/%03d.m3u", nCDNr);
FILE* fp2 = fopen(str, "rt");
if (fp2)
{
fgets(szLine, sizeof(szLine), fp2); //header überlesen:
while (fgets(szLine, sizeof(szLine), fp2))
{
chop(szLine);
str = szLine;
int nPos1 = str.Find (" ");
int nPos2 = str.Find (" - ");
str.Format("%s", (const char*)str.Mid(nPos2+3));

fgets(szLine, sizeof(szLine), fp2); //filename
chop(szLine);
m_arMP3files.Add(szLine);

ti2 = m_tree.InsertItem(str, ti, TVI_LAST);
m_tree.SetItemData(ti2, m_arMP3files.GetSize()-1);
}
fclose(fp2);
}

}
}
fclose(fp);
}

m_tree.SortChildren(TVI_ROOT);
}


//über alle items loopen
void CM3uExplorerDlg::DoLoadTree(const char* lpszActFile)
{
HTREEITEM hCurrent = m_tree.GetNextItem(TVI_ROOT, TVGN_CHILD);
while (hCurrent != NULL)
{
BOOL bAllSelected = TRUE;

HTREEITEM hCurrent2 = m_tree.GetNextItem(hCurrent, TVGN_CHILD);
while (hCurrent2 != NULL)
{
if (m_tree.GetCheck(hCurrent2) == FALSE)
bAllSelected = FALSE;

hCurrent2 = m_tree.GetNextItem(hCurrent2, TVGN_NEXT);
}

if (bAllSelected)
{
m_tree.SetCheck(hCurrent, TRUE);
m_tree.Expand(hCurrent, TVE_COLLAPSE);
}

hCurrent = m_tree.GetNextItem(hCurrent, TVGN_NEXT);
}
}


//inhalt des trees in file speichern (als winamp playlist)
void CM3uExplorerDlg::DoSaveTree()
{
const char* lpszFilter = "M3U Listen (*.m3u)|*.m3u|"
"Alle Files|*.*|"
"|";

CFileDialog dlg(FALSE, "m3u", "", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, lpszFilter);

if (dlg.DoModal() != IDOK)
return;

CString strFilename = dlg.GetPathName();

FILE* fp = fopen(strFilename, "wt");
if (!fp)
{
AfxMessageBox("Datei kann nicht erzeugt werden!");
return;
}

fprintf(fp, "#EXTM3U\n");

HTREEITEM hCurrent = m_tree.GetNextItem(TVI_ROOT, TVGN_CHILD);
while (hCurrent != NULL)
{
BOOL bSaveAll = m_tree.GetCheck(hCurrent);

HTREEITEM hCurrent2 = m_tree.GetNextItem(hCurrent, TVGN_CHILD);
while (hCurrent2 != NULL)
{
if (m_tree.GetCheck(hCurrent2) || bSaveAll)
{
fprintf(fp, "#EXTINF:-1, %s\n", (const char*)m_tree.GetItemText(hCurrent2));
fprintf(fp, "%s\n", (const char*)m_arMP3files.GetAt(m_tree.GetItemData(hCurrent2)));
}

hCurrent2 = m_tree.GetNextItem(hCurrent2, TVGN_NEXT);
}

hCurrent = m_tree.GetNextItem(hCurrent, TVGN_NEXT);
}

fclose(fp);
}