WORD addChildNode(const TreeViewItem &someTreeViewItem,const String &parentString); WORD addSiblingNode(const TreeViewItem &someTreeViewItem,const String &parentString); WORD TreeView::addChildNode(const TreeViewItem &someTreeViewItem,const String &parentString) { HTREEITEM hParent(0); HTREEITEM hTreeItem; HTREEITEM hPrevItem; HTREEITEM hChildItem; String bufferString; TreeViewInsert viewInsert; TreeViewItem viewItem; bufferString.length(255); hTreeItem=getChild(TVGN_ROOT); while(hTreeItem) { hChildItem=getChild(hTreeItem); if(hChildItem&&searchInsertChild(someTreeViewItem,viewInsert,parentString,hChildItem)) { insertItem(viewInsert); return TRUE; } else { viewItem.mask(TreeViewItem::MaskText); viewItem.item(hTreeItem); viewItem.text(bufferString); getItem(viewItem); if(parentString==viewItem.text()) { hParent=hTreeItem; viewItem=TreeViewItem(); viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); viewItem.text(someTreeViewItem.text()); viewItem.image(someTreeViewItem.image()); viewItem.selectedImage(someTreeViewItem.selectedImage()); viewItem.lParam(someTreeViewItem.lParam()); viewInsert.parent(hParent); viewInsert.insertAfter(hPrevItem); viewInsert.viewItem(viewItem); insertItem(viewInsert); return TRUE; } } hPrevItem=hTreeItem; hTreeItem=getNextSibling(hTreeItem); } return TRUE; } WORD TreeView::addSiblingNode(const TreeViewItem &someTreeViewItem,const String &parentString) { HTREEITEM hParent(0); HTREEITEM hTreeItem; HTREEITEM hPrevItem; HTREEITEM hChildItem; String bufferString; TreeViewInsert viewInsert; TreeViewItem viewItem; bufferString.length(255); hTreeItem=getChild(TVGN_ROOT); while(hTreeItem) { hChildItem=getChild(hTreeItem); if(hChildItem&&searchInsertSibling(someTreeViewItem,viewInsert,parentString,hTreeItem,hChildItem)) { insertItem(viewInsert); return TRUE; } else { viewItem.mask(TreeViewItem::MaskText); viewItem.item(hTreeItem); viewItem.text(bufferString); getItem(viewItem); if(parentString==viewItem.text()) { hParent=hTreeItem; viewItem=TreeViewItem(); viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); viewItem.text(someTreeViewItem.text()); viewItem.image(someTreeViewItem.image()); viewItem.selectedImage(someTreeViewItem.selectedImage()); viewItem.lParam(someTreeViewItem.lParam()); viewInsert.parent(hParent); viewInsert.insertAfter(hPrevItem); viewInsert.viewItem(viewItem); insertItem(viewInsert); return TRUE; } } hPrevItem=hTreeItem; hTreeItem=getNextSibling(hTreeItem); } return TRUE; } WORD TreeView::searchInsertChild(TreeViewItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParent) { WORD searchResult(FALSE); HTREEITEM hPrevItem(FALSE); HTREEITEM hTreeItem(hParent); HTREEITEM hChildItem; TreeViewItem searchItem; String bufferString; bufferString.length(String::MaxString); while(hTreeItem) { hChildItem=getChild(hTreeItem); if(hChildItem&&searchInsertChild(viewItem,viewInsert,parentString,hChildItem)) { searchResult=TRUE; break; } searchItem.mask(TreeViewItem::MaskText); searchItem.item(hTreeItem); searchItem.text(bufferString); getItem(searchItem); if(searchItem.text()==parentString) { viewInsert.parent(hTreeItem); viewInsert.insertAfter(hPrevItem); viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); viewInsert.viewItem(viewItem); searchResult=TRUE; break; } hPrevItem=hTreeItem; hTreeItem=getNextSibling(hTreeItem); } return searchResult; } WORD TreeView::searchInsertSibling(TreeViewItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParent,HTREEITEM hChildItem) { WORD searchResult(FALSE); HTREEITEM hPrevItem(FALSE); HTREEITEM hTreeItem(hChildItem); HTREEITEM hChildNode; TreeViewItem searchItem; String bufferString; bufferString.length(String::MaxString); while(hTreeItem) { hChildNode=getChild(hTreeItem); if(hChildNode&&searchInsertSibling(viewItem,viewInsert,parentString,hTreeItem,hChildNode)) { searchResult=TRUE; break; } searchItem.mask(TreeViewItem::MaskText); searchItem.item(hTreeItem); searchItem.text(bufferString); getItem(searchItem); if(searchItem.text()==parentString) { viewInsert.parent(hParent); viewInsert.insertAfter(hPrevItem); viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); viewInsert.viewItem(viewItem); searchResult=TRUE; break; } hPrevItem=hTreeItem; hTreeItem=getNextSibling(hTreeItem); } return searchResult; } // mhTreeViewWnd=::CreateWindow("SysTreeView32","",WS_VISIBLE|WS_BORDER|WS_CHILD|viewFlags, // winRect.left(),winRect.top(),winRect.right(),winRect.bottom(), // parentWindow(),(HMENU)TreeViewID,TreeView::processInstance(),0); // mhTreeViewWnd=::CreateWindowEx(WS_EX_CLIENTEDGE|WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR, // "SysTreeView32","",WS_CHILD|WS_VISIBLE|TVS_HASBUTTONS|TVS_HASLINES|TVS_EDITLABELS, // winRect.left(),winRect.top(),winRect.right(),winRect.bottom(), // parentWindow(),(HMENU)TreeViewID,TreeView::processInstance(),0); // ::UpdateWindow(mhTreeViewWnd); WORD TreeView::addChildNode(const TreeViewItem &someTreeViewItem,const String &parentString) { HTREEITEM hParent(0); HTREEITEM hTreeItem; HTREEITEM hPrevItem; String bufferString; bufferString.length(255); hTreeItem=getChild(TVGN_ROOT); while(hTreeItem) { TreeViewItem viewItem; viewItem.mask(TreeViewItem::MaskText); viewItem.item(hTreeItem); viewItem.text(bufferString); getItem(viewItem); if(parentString==viewItem.text()) { hParent=hTreeItem; while(hTreeItem){hPrevItem=hTreeItem;hTreeItem=getChild(hTreeItem);} TreeViewInsert viewInsert; viewItem=TreeViewItem(); viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); viewItem.text(someTreeViewItem.text()); viewItem.image(someTreeViewItem.image()); viewItem.selectedImage(someTreeViewItem.selectedImage()); viewItem.lParam(someTreeViewItem.lParam()); viewInsert.parent(hParent); viewInsert.insertAfter(hPrevItem); viewInsert.viewItem(viewItem); insertItem(viewInsert); break; } hPrevItem=hTreeItem; hTreeItem=getNextSibling(hTreeItem); } return TRUE; } WORD TreeView::searchInsert(const TreeItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParent) { WORD searchResult(FALSE); HTREEITEM hPrevItem(FALSE); HTREEITEM hTreeItem(hParent); TreeViewItem searchItem; String bufferString; bufferString.length(String::MaxString); while(hTreeItem) { searchItem.mask(TreeViewItem::MaskText); searchItem.item(hTreeItem); searchItem.text(bufferString); getItem(searchItem); if(searchItem.text()==parentString) { viewInsert.parent(hParent); viewInsert.insertAfter(hPrevItem); viewInsert.viewItem(viewItem); searchResult=TRUE; break; } hPrevItem=hTreeItem; hTreeItem=getNextSibling(hTreeItem); } return searchResult; } #if 0 WORD TreeView::addChildNode(DWORD indexImage,const String &textString,const String &parentString,DWORD userData) { treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); treeViewItem.text(textString); treeViewItem.image(indexImage); treeViewItem.selectedImage(I_IMAGECALLBACK); treeViewItem.lParam(userData); treeViewInsert.parent(hParent); treeViewInsert.insertAfter(hPrevItem); treeViewInsert.viewItem(treeViewItem); insertItem(treeViewInsert); break; } hPrevItem=hTreeItem; hTreeItem=getNextSibling(hTreeItem); } return TRUE; } #endif #if 0 WORD TreeView::addChildNode(DWORD indexImage,const String &textString,const String &parentString,DWORD userData) { HTREEITEM hParent(0); HTREEITEM hTreeItem; HTREEITEM hPrevItem; String bufferString; bufferString.length(255); hTreeItem=getChild(TVGN_ROOT); while(hTreeItem) { TreeViewItem treeViewItem; treeViewItem.mask(TVIF_TEXT); treeViewItem.item(hTreeItem); treeViewItem.text(bufferString); getItem(treeViewItem); if(parentString==treeViewItem.text()) { hParent=hTreeItem; while(hTreeItem) { hPrevItem=hTreeItem; hTreeItem=getChild(hTreeItem); } TreeViewInsert treeViewInsert; TreeViewItem treeViewItem; treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); treeViewItem.text(textString); treeViewItem.image(indexImage); treeViewItem.selectedImage(I_IMAGECALLBACK); treeViewItem.lParam(userData); treeViewInsert.parent(hParent); treeViewInsert.insertAfter(hPrevItem); treeViewInsert.viewItem(treeViewItem); insertItem(treeViewInsert); break; } hPrevItem=hTreeItem; hTreeItem=getNextSibling(hTreeItem); } return TRUE; } #endif #if 0 HTREEITEM FindOrAddTreeViewItem(HWND hWndTV,HTREEITEM hParent,int iImage,int iSelectedImage,LPSTR szText,LPARAM lParam) { TV_ITEM tvItem; // Temporary item HTREEITEM hItem; // Handle to item HTREEITEM hPrevItem; // Handle to previous item char szBuffer[256]; // Temporary buffer // Get the first child of the passed in parent hItem=TreeView_GetChild(hWndTV,hParent); // Loop through all children, looking for an already existing child. while(hItem) { tvItem.mask= TVIF_TEXT; // We want the text tvItem.hItem= hItem; // Indicate the item to fetch tvItem.pszText=szBuffer; // Indicate the buffer tvItem.cchTextMax=sizeof(szBuffer); // Indicate buffer's size ::TreeView_GetItem(hWndTV,&tvItem); // Fetch, Rover! if(!lstrcmpi(tvItem.pszText,szText))return hItem; hPrevItem=hItem; // Remember the last item, since the next line // of code will eventually put a NULL in the // hItem variable, and we want to know the // last item under the parent in case we need // to add a new item. // Get the next sibling item in the TreeView, if any. hItem=::TreeView_GetNextSibling(hWndTV,hItem); } // If we made it here, then the item needs to be added onto the end of the list return AddTreeViewItem ( hWndTV, // Handle of TreeView hParent, // Parent item hPrevItem, // Last child in list (from above loop) iImage, // These are the parameters iSelectedImage,// passed into this szText, // function. lParam // ); } #endif #if 0 if (hWndTreeView) { TreeView_SetImageList ( hWndTreeView, hCoasterImageList, 0 ); ImageList_SetBkColor ( hCoasterImageList, GetSysColor ( COLOR_WINDOW )); FillTreeView ( hWndTreeView ); } } #endif // enum StateFlags{StateFocused=TVIS_FOCUSED,StateSelected=TVIS_SELECTED, // StateCut=TVIS_CUT,StateDropHilited=TVIS_DROPHILITED,StateBold=TVIS_BOLD, // StateExpanded=TVIS_EXPANDED,StateExpandedOnce=TVIS_EXPANDEDONCE}; #if 0 TreeViewInfo &treeViewInfo=((TreeViewInfo&)*((TreeViewInfo*)someCallbackData.lParam())); TreeViewNotify &treeViewNotify=(*((TreeViewNotify*)someCallbackData.lParam())); if(TreeViewID==((NotifyMessageHeader&)treeViewInfo).idFrom()) { switch(((NotifyMessageHeader&)treeViewInfo).code()) { case TVN_SELCHANGING : return tvnSelChanging(treeViewNotify); case TVN_SELCHANGED : return tvnSelChanged(treeViewNotify); case TVN_GETDISPINFO : return tvnGetDispInfo(treeViewInfo); case TVN_SETDISPINFO : return tvnSetDispInfo(treeViewInfo); case TVN_ITEMEXPANDING : return tvnItemExpanding(treeViewInfo); case TVN_BEGINDRAG : return tvnBeginDrag(treeViewNotify); case TVN_BEGINRDRAG : return tvnBeginRDrag(treeViewNotify); case TVN_DELETEITEM : return tvnDeleteItem(treeViewInfo); case TVN_BEGINLABELEDIT : return tvnBeginLabelEdit(treeViewInfo); case TVN_ENDLABELEDIT : return tvnEndLabelEdit(treeViewInfo); case TVN_KEYDOWN : return tvnKeyDown(treeViewInfo); } } #endif if(((TreeViewItem&)treeViewInfo).state()&TVIS_EXPANDED) { ((TreeViewItem&)treeViewInfo).image(FolderOpen); ((TreeViewItem&)treeViewInfo).selectedImage(FolderOpen); } else { ((TreeViewItem&)treeViewInfo).image(FolderClosed); ((TreeViewItem&)treeViewInfo).selectedImage(FolderClosed); } WNDPROC sOrigProc; void subClass(HINSTANCE hProcessInstance); __declspec(dllexport) LONG FAR PASCAL windowProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); // ******************************************************************************** void subClass(HINSTANCE hProcessInstance) { WNDCLASS wndClass; ::GetClassInfo(0,"SysTreeView32",&wndClass); wndClass.lpszClassName="SysTreeView32Sk"; sOrigProc=wndClass.lpfnWndProc; wndClass.lpfnWndProc=(WNDPROC)windowProcedure; wndClass.hInstance=hProcessInstance; ::RegisterClass(&wndClass); } long FAR PASCAL windowProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { if(WM_RBUTTONUP==message)::MessageBeep(0); return sOrigProc(hWnd,message,wParam,lParam); } WORD TreeView::appendNode(NodeType nodeType,DWORD itemIndex,const String &text,DWORD userData,WORD selected) { HTREEITEM hInsertItem; TreeViewItem treeViewItem; TreeViewInsert treeViewInsert; // String workString; // workString=text; treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); treeViewItem.text((LPSTR)(String&)text); treeViewItem.maxText(text.length()); treeViewItem.image(itemIndex); treeViewItem.selectedImage(I_IMAGECALLBACK); treeViewItem.lParam(userData); if(NodeChild==nodeType)treeViewInsert.parent(mLastInsert.insertAfter()); else treeViewInsert.parent(mLastInsert.parent()); treeViewInsert.insertAfter(mLastInsert.insertAfter()); treeViewInsert.viewItem(treeViewItem); hInsertItem=insertItem(treeViewInsert); if(!hInsertItem)return FALSE; if(selected)selectItem(hInsertItem); return (hInsertItem?TRUE:FALSE); }