code 用TREE显示统计信息,怎么更新?
Ttvdata::Ttvdata(HWND hTree)
{
m_hTree = hTree;
int i;
TREE_ITEM item = {0};
char text [60] = {0};
item.id = ELEM_STATE;
item.parent_id = 0;
lstrcpy(item.text, "Stopped");
m_lst_item.push_back(item);
item.id = ELEM_STATE_SPEED;
item.parent_id = ELEM_STATE;
lstrcpy(item.text, "Speed:");
m_lst_item.push_back(item);
item.id = ELEM_STATE_ELAPSED;
item.parent_id = ELEM_STATE;
lstrcpy(item.text, "Elasped time:");
m_lst_item.push_back(item);
item.id = ELEM_DOWNLOADED;
item.parent_id = 0;
lstrcpy(item.text, "Downloaded");
m_lst_item.push_back(item);
item.id = ELEM_DOWNLOADED_A;
item.parent_id = ELEM_DOWNLOADED;
lstrcpy(item.text, "Pages");
m_lst_item.push_back(item);
for (i=0; i<=g_nSearchDepth; i++) {
item.id = ELEM_DOWNLOADED_A+i+1;
item.parent_id = ELEM_DOWNLOADED_A;
sprintf(text, "Level %d", i);
lstrcpy(item.text, text);
m_lst_item.push_back(item);
}
item.id = ELEM_DOWNLOADED_P;
item.parent_id = ELEM_DOWNLOADED;
lstrcpy(item.text, "Pics");
m_lst_item.push_back(item);
for (i=0; i<=g_nSearchDepth; i++) {
item.id = ELEM_DOWNLOADED_P+i+1;
item.parent_id = ELEM_DOWNLOADED_P;
sprintf(text, "Level %d", i);
lstrcpy(item.text, text);
m_lst_item.push_back(item);
}
item.id = ELEM_QUEUED;
item.parent_id = 0;
lstrcpy(item.text, "Queued");
m_lst_item.push_back(item);
item.id = ELEM_QUEUED_A;
item.parent_id = ELEM_QUEUED;
lstrcpy(item.text, "Pages");
m_lst_item.push_back(item);
for (i=0; i<=g_nSearchDepth; i++) {
item.id = ELEM_QUEUED_A+i+1;
item.parent_id = ELEM_QUEUED_A;
sprintf(text, "Level %d", i);
lstrcpy(item.text, text);
m_lst_item.push_back(item);
}
item.id = ELEM_QUEUED_P;
item.parent_id = ELEM_QUEUED;
lstrcpy(item.text, "Pics");
m_lst_item.push_back(item);
for (i=0; i<=g_nSearchDepth; i++) {
item.id = ELEM_QUEUED_P+i+1;
item.parent_id = ELEM_QUEUED_P;
sprintf(text, "Level %d", i);
lstrcpy(item.text, text);
m_lst_item.push_back(item);
}
item.id = ELEM_FAILED;
item.parent_id = 0;
lstrcpy(item.text, "Failed");
m_lst_item.push_back(item);
item.id = ELEM_FAILED_A;
item.parent_id = ELEM_FAILED;
lstrcpy(item.text, "Pages");
m_lst_item.push_back(item);
for (i=0; i<=g_nSearchDepth; i++) {
item.id = ELEM_FAILED_A+i+1;
item.parent_id = ELEM_FAILED_A;
sprintf(text, "Level %d", i);
lstrcpy(item.text, text);
m_lst_item.push_back(item);
}
item.id = ELEM_FAILED_P;
item.parent_id = ELEM_FAILED;
lstrcpy(item.text, "Pics");
m_lst_item.push_back(item);
for (i=0; i<=g_nSearchDepth; i++) {
item.id = ELEM_FAILED_P+i+1;
item.parent_id = ELEM_FAILED_P;
sprintf(text, "Level %d", i);
lstrcpy(item.text, text);
m_lst_item.push_back(item);
}
item.id = ELEM_FILTERED;
item.parent_id = 0;
lstrcpy(item.text, "Filtered");
m_lst_item.push_back(item);
item.id = ELEM_FILTERED_A;
item.parent_id = ELEM_FILTERED;
lstrcpy(item.text, "Pages");
m_lst_item.push_back(item);
for (i=0; i<=g_nSearchDepth; i++) {
item.id = ELEM_FILTERED_A+i+1;
item.parent_id = ELEM_FILTERED_A;
sprintf(text, "Level %d", i);
lstrcpy(item.text, text);
m_lst_item.push_back(item);
}
list<TREE_ITEM>::iterator pos = m_lst_item.begin();
while (pos != m_lst_item.end())
{
TVINSERTSTRUCT is;
long parent_id = get_parent((*pos).id);
HTREEITEM hParent = get_elem(parent_id);
is.hParent = hParent;
is.hInsertAfter = TVI_LAST;
is.item.mask = TVIF_TEXT;
is.item.pszText = (*pos).text;
is.item.cchTextMax = strlen((*pos).text);
HTREEITEM h = TreeView_InsertItem(hTree, &is);
(*pos).hItem = h;
pos++;
}
}
HTREEITEM Ttvdata::get_elem(long id)
{
list<TREE_ITEM>::iterator pos = m_lst_item.begin();
while (pos != m_lst_item.end()) {
if ((*pos).id == id)
return (*pos).hItem;
pos++;
}
return NULL;
}
long Ttvdata::get_elem (HTREEITEM hItem)
{
list<TREE_ITEM>::iterator pos = m_lst_item.begin();
while (pos != m_lst_item.end()) {
if ((*pos).hItem == hItem)
return (*pos).id;
pos++;
}
return 0;
}
long Ttvdata::get_parent(long id)
{
list<TREE_ITEM>::iterator pos = m_lst_item.begin();
while (pos != m_lst_item.end()) {
if ((*pos).id == id)
return (*pos).parent_id;
pos++;
}
return 0;
}
void Ttvdata::set_text(long id, const char* text)
{
list<TREE_ITEM>::iterator pos = m_lst_item.begin();
while (pos != m_lst_item.end()) {
if ((*pos).id == id) {
lstrcpy((*pos).text, text);
return;
}
pos++;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
void Ttvdata::refresh(long id)
{
if (id == 0)
{
list<TREE_ITEM>::iterator pos = m_lst_item.begin();
while (pos != m_lst_item.end()) {
refresh((*pos).id);
pos++;
}
}
else
{
list<TREE_ITEM>::iterator pos = m_lst_item.begin();
while (pos != m_lst_item.end())
{
if ((*pos).id == id) {
TVITEM item = {0};
item.mask = TVIF_TEXT;
item.hItem = (*pos).hItem;
item.pszText = (*pos).text;
item.cchTextMax = strlen((*pos).text);
TreeView_SetItem(m_hTree, &item);
return;
}
pos++;
}
}
}
Tqueue* Ttvdata::get_queue(long id)
{
if (id > ELEM_DOWNLOADED_A && id <= ELEM_DOWNLOADED_A+g_nSearchDepth+1)
return g_q_a_downloaded[id-ELEM_DOWNLOADED_A-1];
if (id > ELEM_DOWNLOADED_P && id <= ELEM_DOWNLOADED_P+g_nSearchDepth+1)
return g_q_p_downloaded[id-ELEM_DOWNLOADED_P-1];
if (id > ELEM_QUEUED_A && id <= ELEM_QUEUED_A+g_nSearchDepth+1)
return g_q_a_queued[id-ELEM_QUEUED_A-1];
if (id > ELEM_QUEUED_P && id <= ELEM_QUEUED_P+g_nSearchDepth+1)
return g_q_p_queued[id-ELEM_QUEUED_P-1];
if (id > ELEM_FAILED_A && id <= ELEM_FAILED_A+g_nSearchDepth+1)
return g_q_a_failed[id-ELEM_FAILED_A-1];
if (id > ELEM_FAILED_P && id <= ELEM_FAILED_P+g_nSearchDepth)
return g_q_p_failed[id-ELEM_FAILED_P];
if (id > ELEM_FILTERED_A && id <= ELEM_FILTERED_A+g_nSearchDepth+1)
return g_q_a_filtered[id-ELEM_FILTERED_A];
if (id > ELEM_FILTERED_P && id <= ELEM_FILTERED_P+g_nSearchDepth-1)
return g_q_p_filtered[id-ELEM_FILTERED_P];
return NULL;
}
///////////////////////////////////////////////////////////////////////////////////////////////