// TraverseTree.h : Declaration of the CTraverseTree #ifndef __TRAVERSETREE_H_#define __TRAVERSETREE_H_ #include "resource.h" // main symbols#include "COMDEF.H"// For _bstr_t #import "C:\Program Files\Skyline\TerraExplorer Pro\TerraExplorer.exe" no_namespace, named_guids // CTraverseTreeclass ATL_NO_VTABLE CTraverseTree : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<CTraverseTree, &CLSID_TraverseTree>, public IDispatchImpl<ITraverseTree, &IID_ITraverseTree, &LIBID_TRAVERSEINFOTREELib>{public: CTraverseTree() { m_pIObjectManager3= NULL; m_pIInformationTree3 = NULL; } DECLARE_REGISTRY_RESOURCEID(IDR_TRAVERSETREE) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CTraverseTree) COM_INTERFACE_ENTRY(ITraverseTree) COM_INTERFACE_ENTRY(IDispatch)END_COM_MAP() // ITraverseTreepublic: STDMETHOD(SetLabelsHeights)() { m_pIInformationTree3.CreateInstance(CLSID_TerraExplorer); m_pIInformationTree3.QueryInterface(IID_IObjectManager, (IObjectManagerPtr**)&m_pIObjectManager3); TraverseBranch(0); return S_OK; } void TraverseBranch(long ItemID) { try { //Get the first child item of this group. long SiblingItemID; SiblingItemID = m_pIInformationTree3->GetNextItem(ItemID, CHILD); if (SiblingItemID == 0) return; //Start with the first child item and traverse //all of the sibling items in that group. while (SiblingItemID != 0) { if (m_pIInformationTree3->IsGroup(SiblingItemID)) { //If we are here, this tree item is a group. //A recursive call - traverse all of the tree items under this group. TraverseBranch(SiblingItemID); } else { //If we are here, this tree item is an object. //Get an interface to the object that this is its ID. ITerraExplorerObject2Ptr pITEObject = m_pIInformationTree3->GetObject(SiblingItemID); if (pITEObject != NULL) { // Check that this is a label ITerrainLabel2Ptr pITerrainLabel2 = NULL; HRESULT hr = pITEObject.QueryInterface(IID_ITerrainLabel2, (ITerrainLabel2Ptr**)&pITerrainLabel2); if (SUCCEEDED(hr)) //This is a label. Set its height to 10 meters above the ground. //The last parameter is a combination of the following values: IGNORE_X | //IGNORE_Y | IGNORE_ORIENTATION. See ITerrainLocation2::SetPosition //method for a detail list of possible values. pITerrainLabel2->SetPosition(0,0,10,0,0,0, 61); } } //Continue to the next sibling tree item. SiblingItemID = m_pIInformationTree3->GetNextItem(SiblingItemID, NEXT); } } catch(_com_error const &e) { ATLTRACE((char*)e.Description()); return; } } IObjectManagerPtr m_pIObjectManager3; IInformationTreePtrm_pIInformationTree3;};#endif //__TRAVERSETREE_H_
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货