int CXTPTaskPanelGroup::CalcInsideHeight() { CRect rc; m_pPanel->GetClientRect(&rc); int nInsideHeight = rc.Height(); CXTPTaskPanelPaintManager* pPaintManager = GetPaintManager(); int nGroupSpacing = pPaintManager->GetGroupSpacing(m_pPanel); CRect rcMargins = pPaintManager->GetControlMargins(m_pPanel); int nGroupCount = m_pPanel->GetGroupCount(); int nVisibleCount = 0; for (int i = 0; i < nGroupCount; i++) { CXTPTaskPanelGroup* pGroup = m_pPanel->GetAt(i); if (!pGroup->IsVisible()) continue; nVisibleCount++; CRect rcMarginsOuter = pPaintManager->GetGroupOuterMargins(pGroup); nInsideHeight -= pGroup->m_nCaptionHeight + rcMarginsOuter.top + rcMarginsOuter.bottom; if (pGroup->IsExpanded() && pGroup != m_pPanel->GetActiveGroup()) nInsideHeight -= pGroup->m_nExpandedClientHeight; } nInsideHeight -= nVisibleCount > 0 ? nGroupSpacing * (nVisibleCount - 1) : 0; nInsideHeight -= rcMargins.top + rcMargins.bottom; return nInsideHeight; }
bool CMainFrame::_CreateMeshPanel( CImageList& imageList, Ogre::StringVectorPtr& meshNames ) { if (!m_resourceSelector.Create(WS_CHILD|WS_VISIBLE, CRect(200,100,400,300), this, IDS_ResourceSelector)) return false; m_resourceSelector.SetOwner(this); m_resourceSelector.SetIconSize(CSize(MESH_ICON_SIZE, MESH_ICON_SIZE)); CXTPTaskPanelGroup* pGroup = m_resourceSelector.AddGroup(IDS_ResourceSelector_Mesh); int itemCount = imageList.GetImageCount(); m_resourceSelector.GetImageManager()->SetImageList(imageList.Detach(), 0); for (int i=0; i<itemCount; ++i) { std::wstring meshname(Utility::EngineToUnicode(meshNames->at(i))); meshname.erase(meshname.length()-5); // Add folder entries CXTPTaskPanelGroupItem* pItem = pGroup->AddLinkItem(i, 0); pItem->SetIconIndex(i); pItem->SetCaption(meshname.c_str()); } m_resourceSelector.SetBehaviour(xtpTaskPanelBehaviourList); m_resourceSelector.SetSelectItemOnFocus(TRUE); m_resourceSelector.SetMultiColumn(TRUE); m_resourceSelector.SetColumnWidth(RES_SELECTOR_COLUMN_WIDTH); m_resourceSelector.GetAt(0)->SetExpanded(TRUE); //拖拽支持 m_resourceSelector.AllowDrag(xtpTaskItemAllowDragCopyOutsideControl); return true; }
// 加载Toolbox配置文件 BOOL CVciOwm::LoadToolbox(LPCTSTR lpszToolboxFile) { if(GetFileAttributes(lpszToolboxFile) == 0xFFFFFFFF) { return FALSE; } CXmlParser parser; if(parser.Open(lpszToolboxFile)) { DEBUG_OUTF(LOG_LEVEL_ERROR, "Load toolbox file %s fail!", lpszToolboxFile); return FALSE; } CString strImagePath = theApp.GetModulePath(); BOOL bRet = TRUE; DOMNode* pNode = parser.GetRootNode(); // 加载图片资源 DOMNode* pImageNode = parser.GetChildNode(pNode, "image"); while (pImageNode != NULL) { CString strIconFile = strImagePath + "\\" + parser.GetNodeAttribute(pImageNode, "file"); int nImageId = atoi(parser.GetNodeAttribute(pImageNode, "id")); // 加载单个图片 if(!theApp.SetToolboxIcon(strIconFile, nImageId)) { bRet = FALSE; } pImageNode = parser.GetNextNode(pImageNode, "image"); } DOMNode* pImageListNode = parser.GetChildNode(pNode, "imagelist"); while (pImageListNode != NULL) { CString strBmpFile = strImagePath + "\\" + parser.GetNodeAttribute(pImageListNode, "file"); CString strIDs = parser.GetNodeText(pImageListNode); CUIntArray auID; int nPos = strIDs.Find(","); while(nPos != -1) { auID.Add(atoi(strIDs.Left(nPos))); strIDs.Delete(0, nPos+1); nPos = strIDs.Find(","); } auID.Add(atoi(strIDs)); // 加载图片列表 if(!theApp.SetToolboxIcons(strBmpFile, &auID)) { bRet = FALSE; } pImageListNode = parser.GetNextNode(pImageListNode, "imagelist"); } // 加载控件组和控件 DOMNode* pGroupNode = parser.GetChildNode(pNode, "group"); while (pGroupNode != NULL) { CString strGroupName = parser.GetNodeAttribute(pGroupNode, "name"); int nGroupId = atoi(parser.GetNodeAttribute(pGroupNode, "id")); BOOL bExpand = (parser.GetNodeAttribute(pGroupNode, "expand") == "true"); CXTPTaskPanelGroup* pFolderClass = theApp.CreateToolboxGroup(nGroupId, strGroupName); // 加载控件 DOMNode* pItemNode = parser.GetChildNode(pGroupNode, "control"); while (pItemNode != NULL) { CString strControlName = parser.GetNodeAttribute(pItemNode, "name"); int nControlImageId = atoi(parser.GetNodeAttribute(pItemNode, "image-id")); CXTPTaskPanelGroupItem* pItem = pFolderClass->AddLinkItem(nControlImageId, nControlImageId); pItem->SetCaption(theApp.StripMnemonics(strControlName)); pItemNode = parser.GetNextNode(pItemNode, "control"); } pFolderClass->SetExpanded(bExpand); pGroupNode = parser.GetNextNode(pGroupNode, "group"); } parser.Close(); return TRUE; }