//********************************************************************** void CBCGPRibbonCustomizeRibbonPage::RebuildDestTree(DWORD_PTR dwNewSel, BOOL bExpandSel) { #ifndef BCGP_EXCLUDE_GRID_CTRL if (dwNewSel == 0) { CBCGPGridRow* pRow = m_wndRibbonTreeDest.GetCurSel(); if (pRow != NULL) { dwNewSel = pRow->GetData(); } } m_wndRibbonTreeDest.SetRedraw(FALSE); m_wndRibbonTreeDest.RebuildItems(m_bNoContextCategories ? 1 : m_nRibbonTabsDest, m_strMainTabs); if (dwNewSel != 0) { CBCGPGridRow* pRow = m_wndRibbonTreeDest.FindRowByData(dwNewSel); if (pRow != NULL) { if (bExpandSel && pRow->IsGroup()) { pRow->Expand(); } m_wndRibbonTreeDest.SetCurSel(pRow, FALSE); m_wndRibbonTreeDest.EnsureVisible(pRow, TRUE); } } m_wndRibbonTreeDest.SetRedraw(); m_wndRibbonTreeDest.RedrawWindow(); #endif }
//********************************************************************** void CBCGPRibbonCustomizeRibbonPage::MoveItem (BOOL bMoveUp) { #ifndef BCGP_EXCLUDE_GRID_CTRL int nOffset = bMoveUp ? - 1: 1; BOOL bIsSelExpanded = FALSE; CBCGPGridRow* pRow = m_wndRibbonTreeDest.GetCurSel(); if (pRow != NULL && pRow->IsGroup()) { bIsSelExpanded = pRow->IsExpanded(); } if (m_pSelCategoryDest != NULL) { ASSERT_VALID(m_pSelCategoryDest); if (m_pSelCategoryDest->IsCustom()) { UINT nContextID = m_wndRibbonTreeDest.GetContextID(pRow, nOffset); m_CustomizationData.SetTabContextID(m_pSelCategoryDest, nContextID); } m_CustomizationData.SetTabIndex(m_pSelCategoryDest, m_CustomizationData.GetTabIndex(m_pSelCategoryDest) + nOffset); } else if (m_pSelPanelDest != NULL) { ASSERT_VALID(m_pSelPanelDest); int nCurIndex = m_CustomizationData.GetPanelIndex(m_pSelPanelDest); ASSERT(nCurIndex >= 0); m_CustomizationData.SetPanelIndex(m_pSelPanelDest, nCurIndex + nOffset); } else if (m_pSelElemDest != NULL) { ASSERT_VALID(m_pSelElemDest); m_CustomizationData.MoveElement(m_pSelElemDest, nOffset); } RebuildDestTree(); pRow = m_wndRibbonTreeDest.GetCurSel(); if (bIsSelExpanded && pRow != NULL) { pRow->Expand(); } #endif }
//********************************************************************** void CBCGPRibbonCustomizeRibbonPage::OnSelendokRibbonTabsDest() { #ifndef BCGP_EXCLUDE_GRID_CTRL UpdateData(); RebuildDestTree(); CBCGPGridRow* pRow = m_wndRibbonTreeDest.FindRowByData((DWORD_PTR)m_pRibbonBar->GetActiveCategory()); if (pRow != NULL) { m_wndRibbonTreeDest.SetCurSel(pRow); if (pRow->IsGroup()) { pRow->Expand(); } } #endif }
BOOL CIfExpressEditorDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 ASSERT(pMsg != NULL); if (pMsg->message==WM_LBUTTONDOWN) { ZTools::WriteZToolsFormatLog("WM_LBUTTONDOWN"); if (m_wndTreeDropDown.IsWindowVisible()) { m_wndTreeDropDown.ShowWindow(SW_HIDE); ZTools::WriteZToolsFormatLog("鼠标点击隐藏树,失去焦点后"); return TRUE; // 本次点击只隐藏树 } int iTickTime = GetTickCount(); int iGapTime = iTickTime - m_iTickCountTreeLeaveFocus; if (CPoint(pMsg->pt) == m_PointTreeLeaveFocus && iGapTime < 100) { ZTools::WriteZToolsFormatLog("鼠标点击使得树失去焦点而隐藏,失去焦点前"); return TRUE; //屏蔽隐藏树前的点击事件 } CRect rect; bool bShowTree = FALSE; CCxStructTreeNode *pNodeCur = NULL; CString strArrID; CString strTextArry; if ( pMsg->hwnd == m_EditLeft.GetSafeHwnd()) { bShowTree = TRUE; m_EditLeft.GetWindowRect(&rect); pNodeCur = m_pNodeLeft; if (!m_Express.m_LeftParam.strArry.IsEmpty()) { strArrID = m_Express.m_LeftParam.strID; m_EditLeftArry.GetWindowText(strTextArry); } m_iFocusEidtPCtrlID = IDC_EDIT_LEFT; } else if (pMsg->hwnd == m_EditRight.GetSafeHwnd()) { if (pMsg->hwnd == m_EditRight.GetSafeHwnd() && m_ComboRightType.GetCurSel()==TP_CONST) bShowTree = FALSE; else { bShowTree = TRUE; m_EditRight.GetWindowRect(&rect); pNodeCur = m_pNodeRight; if (!m_Express.m_RightParam.strArry.IsEmpty()) { strArrID = m_Express.m_RightParam.strID; m_EditRightArry.GetWindowText(strTextArry); } } m_iFocusEidtPCtrlID = IDC_EDIT_RIGHT; } if (bShowTree) { if (pNodeCur) { if (!strTextArry.IsEmpty()) { CCxStructTreeNode *pDefaultSel = FindArryElementNode(strArrID,strTextArry); if (pDefaultSel) pNodeCur = pDefaultSel; } CBCGPGridRow* pSel = m_wndTreeDropDown.m_IfEditTree.FindRowByData((DWORD_PTR)pNodeCur); m_wndTreeDropDown.m_IfEditTree.SetCurSel(pSel); m_wndTreeDropDown.m_IfEditTree.UpdateSelToParamName(); //选中树的第一列 if (pSel) { ASSERT_VALID (pSel); CBCGPGridRow* pParent = pSel; while ((pParent = pParent->GetParent ())!= NULL &&pParent->GetSubItemsCount()>0) { ASSERT_VALID (pParent); pParent->Expand (TRUE); } m_wndTreeDropDown.m_IfEditTree.EnsureVisible (pSel, TRUE); // 保证当前选中行可见 } } else { m_wndTreeDropDown.m_IfEditTree.SelectRow(-1); m_wndTreeDropDown.m_IfEditTree.ExpandAll(FALSE); } m_wndTreeDropDown.SetWindowPos(&wndTopMost,rect.left,rect.bottom,0,0,SWP_NOSIZE|SWP_SHOWWINDOW); m_wndTreeDropDown.m_IfEditTree.SetFocus(); return TRUE; } } return CCxBCGPDialog::PreTranslateMessage(pMsg); }