void EXWaitingTreeCtrl::PreExpandItem(HTREEITEM hItem) { if (!NeedsChildren(hItem)) { if (WantsRefresh(hItem)) { // delete child items before populating DeleteChildren(hItem); } else { // doesn't want new items m_hItemToPopulate = NULL; return; } } // if it wants new child items, go on m_hItemToPopulate = hItem; // fix redraw when expanded programatically UpdateWindow(); // hide changes until it's expanded SetRedraw(FALSE); // add wait msg, to allow item expansion m_hItemMsg = InsertItem(m_sWaitMsg, m_hItemToPopulate); // zero progress m_iItemCount = 1; m_iItemIndex = 0; }
void CTangramHtmlTreeExWnd::PreExpandItem(HTREEITEM hItem) { if(hItem) { m_hCurSelectedItem = hItem; CTangramXHtmlTreeNode *pXTCD = GetItemDataStruct(hItem); if(pXTCD->m_hWaitItemMsg) { m_hItemToPopulate = hItem; // fix redraw when expanded programatically UpdateWindow(); // hide changes until it's expanded SetRedraw(false); // add wait msg, to allow item expansion m_hItemMsg = pXTCD->m_hWaitItemMsg;//InsertItem(m_sWaitMsg, m_hItemToPopulate); // zero progress m_iItemCount = 1; m_iItemIndex = 0; return; } } if (!NeedsChildren(hItem)) { if (WantsRefresh(hItem)) { // delete child items before populating DeleteChildren(hItem); } else { // doesn't want new items m_hItemToPopulate = NULL; return; } } // if it wants new child items, go on m_hItemToPopulate = hItem; // fix redraw when expanded programatically UpdateWindow(); // hide changes until it's expanded SetRedraw(false); // add wait msg, to allow item expansion m_hItemMsg = InsertItem(m_sWaitMsg, m_hItemToPopulate); // zero progress m_iItemCount = 1; m_iItemIndex = 0; }
void EXWaitingTreeCtrl::ExpandItem(HTREEITEM hItem) { if (m_hItemToPopulate == NULL) return; // just expand, doesn't want new items ASSERT(hItem == m_hItemToPopulate); // should never fail!!! if (m_bShowWaitMsg) { // display wait msg now, make sure it's visible SetRedraw(); EnsureVisible(m_hItemMsg); UpdateWindow(); } // setup animation thread, call PreAnimation StartAnimation(); // draw icon if (m_bShowWaitMsg) DrawUserIcon(); // delay redraw after populating SetRedraw(FALSE); // take a snapshot of the background TakeSnapshot(); // del temporary item (wait msg still shown) DeleteItem(m_hItemMsg); // fill in with sub items BOOL bCheckChildren = PopulateItem(hItem); // clean up animation thread, call PostAnimation StopAnimation(); // change parent to reflect current children number if (hItem != TVI_ROOT) { TVITEM item; item.hItem = hItem; item.mask = TVIF_HANDLE | TVIF_CHILDREN; item.cChildren = NeedsChildren(hItem) ? 0 : 1; if (bCheckChildren) SetItem(&item); else if (item.cChildren == 0) // restore item's plus button if no children inserted SetItemState(hItem, 0, TVIS_EXPANDED); } // clean up snapshot DestroySnapshot(); // redraw now SetRedraw(TRUE); }