void WTreeNode::OnTreeNodeCheck() { if(treeCheckBox_->isChecked()) SetTreeCheck(true); else SetTreeCheck(false); }
BOOL CDlgLayerTree::CheckTreeItemName(CString sName, HTREEITEM hTI /* = TVI_ROOT */) { if (hTI == NULL || sName.IsEmpty()) { return FALSE; } CString sItemName = m_tree.GetItemText(hTI); if (sItemName.CompareNoCase(sName) == 0) { SetTreeCheck(hTI); return TRUE; } if (m_tree.ItemHasChildren(hTI)) { HTREEITEM ChiItem = m_tree.GetNextItem(hTI, TVGN_CHILD); BOOL bFind = CheckTreeItemName(sName, ChiItem); if (bFind) { return TRUE; } } hTI = m_tree.GetNextItem(hTI, TVGN_NEXT); while (hTI != NULL) { sItemName = m_tree.GetItemText(hTI); if (sItemName.CompareNoCase(sName) == 0) { SetTreeCheck(hTI); return TRUE; } if (m_tree.ItemHasChildren(hTI)) { HTREEITEM ChiItem = m_tree.GetNextItem(hTI, TVGN_CHILD); BOOL bFind = CheckTreeItemName(sName, ChiItem); if (bFind) { return TRUE; } } hTI = m_tree.GetNextItem(hTI, TVGN_NEXT); } return FALSE; }
//----------------------------------------------------------------------------- HTREEITEM CDlgLayerTree::CreateTree(CString sName, HTREEITEM hParent /*= TVI_ROOT*/) { HTREEITEM hReTI = m_tree.InsertItem(sName, hParent); CStringArray strChildNameArray,strNeedArray; if (CLayerTreeDef::GetChildrenAliasName(strChildNameArray, strNeedArray, sName)) { for (int i = strChildNameArray.GetSize() - 1; i >= 0; i--) { CString Right; CPowerConfig::GetRightByResource(strChildNameArray.GetAt(i), Right); int nRight = atoi(Right); if (!(nRight & POWER_SCAN))// 对比查看权限 { //strChildNameArray.RemoveAt(i);///////////////////////////////############################## } } for (int i = 0; i < strChildNameArray.GetSize(); i++) { HTREEITEM hTI = CreateTree(strChildNameArray.GetAt(i), hReTI); CString sTmp = strNeedArray.GetAt(i); if (!sTmp.IsEmpty() && sTmp.CollateNoCase("0") != 0 && hTI != NULL) { SetTreeCheck(hTI); m_SdeAliasNames.Add(strChildNameArray.GetAt(i)); } } } return hReTI; }
void CDlgLayerTree::SetCurSelItemName(HTREEITEM hTI /*= TVI_ROOT*/) { CString sName = m_tree.GetItemText(hTI); BOOL bFind = FALSE; for (int i = 0; (i < m_SdeAliasNames.GetSize()) && !bFind; i++) { if (m_SdeAliasNames.GetAt(i).CompareNoCase(sName) == 0) { SetTreeCheck(hTI); bFind = TRUE; } } if (!bFind && (m_tree.ItemHasChildren(hTI))) { HTREEITEM ChiItem = m_tree.GetNextItem(hTI, TVGN_CHILD); SetCurSelItemName(ChiItem); } HTREEITEM NexItem = m_tree.GetNextItem(hTI, TVGN_NEXT); if (NexItem != NULL) { SetCurSelItemName(NexItem); } }
//----------------------------------------------------------------------------- void CDlgLayerTree::OnNMClickLayerTree(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 UINT uFlag; CPoint pt; CString sSelLayer; HTREEITEM SelRoot,ParRoot,NexRoot; GetCursorPos(&pt); m_tree.ScreenToClient(&pt); SelRoot = m_tree.HitTest(pt,&uFlag); if ((NULL!=SelRoot) && (uFlag&TVHT_ONITEMSTATEICON)) { BOOL bChecked = m_tree.GetCheck(SelRoot); SetTreeCheck(SelRoot, !bChecked); //分析是否有必要对树枝进行调整 ParRoot = m_tree.GetParentItem(SelRoot); while (ParRoot != NULL) { if (bChecked) m_tree.SetCheck(ParRoot,FALSE);//当前处在被选择状态即将被取消选择 else { int k=0;//当前处在非选择状态即将有可能处于选择状态(标志位) NexRoot=m_tree.GetNextItem(ParRoot,TVGN_CHILD); if(NexRoot!=SelRoot) { if(!m_tree.GetCheck(NexRoot)) k=1; } if(k==0) { while(TRUE) { NexRoot=m_tree.GetNextItem(NexRoot,TVGN_NEXT); if(NexRoot==NULL) break; if(NexRoot==SelRoot) continue; if(!m_tree.GetCheck(NexRoot)) { k=1; break; } } } if(k==0) m_tree.SetCheck(ParRoot); } ParRoot = m_tree.GetParentItem(ParRoot); } //if(acedCommand(0)!=RTNORM) sendCommandToAutoCAD("\x1B"); SaveSelLayer(); m_tree.SetCheck(SelRoot, bChecked); } *pResult = 0; }
//----------------------------------------------------------------------------- void CDlgLayerTree::SetTreeCheck(HTREEITEM hTI /*= TVI_ROOT*/, BOOL bCheck /*= TRUE*/) { if (hTI == NULL) { return; } if (m_tree.ItemHasChildren(hTI)) { HTREEITEM ChiItem = m_tree.GetNextItem(hTI, TVGN_CHILD); SetTreeCheck(ChiItem, bCheck); HTREEITEM NexItem = m_tree.GetNextItem(ChiItem, TVGN_NEXT); while (NexItem != NULL) { SetTreeCheck(NexItem, bCheck); NexItem = m_tree.GetNextItem(NexItem, TVGN_NEXT); } } m_tree.SetCheck(hTI, bCheck); }
//----------------------------------------------------------------------------- void CDlgLayerTree::OnBnClickedBtnCloseall() //关闭所有SDE图层 { HTREEITEM hTI = m_tree.GetRootItem(); while (hTI != NULL) { SetTreeCheck(hTI, FALSE); hTI = m_tree.GetNextItem(hTI, TVGN_NEXT); } SaveSelLayer(); }
//----------------------------------------------------------------------------- void CDlgLayerTree::InitializeTreeControl() { m_tree.DeleteAllItems(); CStringArray strNameArray,strNeedArray; if (CLayerTreeDef::GetChildrenAliasName(strNameArray, strNeedArray)==FALSE) return; for (int i = strNameArray.GetSize() - 1; i >= 0; i--) { CString strRight; CPowerConfig::GetRightByResource(strNameArray.GetAt(i), strRight); int nRight = atoi(strRight); if (!(nRight & POWER_SCAN))// 对比查看权限 { //strNameArray.RemoveAt(i); ////////////////////////###################### } } for (int i = 0; i < strNameArray.GetSize(); i++) { HTREEITEM hTI = CreateTree(strNameArray.GetAt(i)); CString sTmp = strNeedArray.GetAt(i); if (!sTmp.IsEmpty() && sTmp.CollateNoCase("0") != 0 && hTI != NULL) { //必选项 //m_tree.SetCheck(hTI); SetTreeCheck(hTI); m_SdeAliasNames.Add(strNameArray.GetAt(i)); } } // 读取用户机器上配置的图层名称,显示为选中 if (m_tree.GetRootItem() == NULL) { return; } ReadSelLayer(); }
//----------------------------------------------------------------------------- void CLayerTreeDlg::OnNMClickLayerTree(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 *pResult = 0; UINT uFlag; CPoint pt; CString sSelLayer; HTREEITEM SelRoot,ParRoot,NexRoot; pt = CPoint(this->GetCurrentMessage()->pt); m_tree.ScreenToClient(&pt); SelRoot = m_tree.HitTest(pt,&uFlag); if (NULL == SelRoot) return; if (uFlag & TVHT_ONITEMSTATEICON) { BOOL bChecked = m_tree.GetCheck(SelRoot); //置反选中状态 SetTreeCheck(SelRoot, !bChecked); //分析是否有必要对树枝进行调整 ParRoot = m_tree.GetParentItem(SelRoot); while (ParRoot != NULL) { if (bChecked) m_tree.SetCheck(ParRoot,FALSE);//当前处在被选择状态即将被取消选择 else { int k=0;//当前处在非选择状态即将有可能处于选择状态(标志位) NexRoot=m_tree.GetNextItem(ParRoot,TVGN_CHILD); if(NexRoot!=SelRoot) { if(!m_tree.GetCheck(NexRoot)) k=1; } if(k==0) { while(TRUE) { NexRoot=m_tree.GetNextItem(NexRoot,TVGN_NEXT); if(NexRoot==NULL) break; if(NexRoot==SelRoot) continue; if(!m_tree.GetCheck(NexRoot)) { k=1; break; } } } if(k==0) m_tree.SetCheck(ParRoot); } ParRoot = m_tree.GetParentItem(ParRoot); } m_tree.SetCheck(SelRoot, bChecked); ShowLayer(SelRoot, !bChecked); // sendCommandToAutoCAD("redraw "); } else if(!m_tree.ItemHasChildren(SelRoot)) { CString strLayerName = m_tree.GetItemText(SelRoot); Acad::ErrorStatus es = Acad::eOk; AcDbDatabase* pDB = acdbHostApplicationServices()->workingDatabase(); if (NULL == pDB) return; AcDbLayerTable *pLyTable = NULL; AcDbLayerTableRecord *pLyRcd = NULL; es = pDB->getSymbolTable(pLyTable,AcDb::kForRead); //获得当前数据库中层表指针 if ( es != Acad::eOk ) { acutPrintf("\n获取LayerTable的时候发生错误,请稍后再试。\n"); return; } if ( !pLyTable->has(strLayerName) ) { pLyTable->close(); return; } pLyTable->close(); SetCurrentLayer(strLayerName); } }