//**************************************************************************** void CBCGPFrameWnd::OnUpdateFrameMenu (HMENU hMenuAlt) { CFrameWnd::OnUpdateFrameMenu (hMenuAlt); BOOL bIsMenuBar = m_Impl.m_pMenuBar != NULL && (m_Impl.m_pMenuBar->GetStyle () & WS_VISIBLE); BOOL bIsRibbon = FALSE; #ifndef BCGP_EXCLUDE_RIBBON if (m_Impl.m_pRibbonBar != NULL && (m_Impl.m_pRibbonBar->GetStyle () & WS_VISIBLE)) { bIsRibbon = TRUE; } #endif if (bIsMenuBar || bIsRibbon) { COleClientItem* pActiveItem = GetInPlaceActiveItem (); if (pActiveItem == NULL || pActiveItem->GetInPlaceWindow () == NULL) { SetMenu (NULL); } else { SetMenu (CMenu::FromHandle (hMenuAlt)); } } }
// Special handling of OnSetFocus and OnSize are required for a container // when an object is being edited in-place. void CMy1553View::OnSetFocus(CWnd* pOldWnd) { COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this); if (pActiveItem != NULL && pActiveItem->GetItemState() == COleClientItem::activeUIState) { // need to set focus to this item if it is in the same view CWnd* pWnd = pActiveItem->GetInPlaceWindow(); if (pWnd != NULL) { pWnd->SetFocus(); // don't call the base class return; } } CView::OnSetFocus(pOldWnd); }
// 在就地编辑一个对象时,容器需要对 OnSetFocus 和 OnSize // 进行特殊处理 void CClientView::OnSetFocus(CWnd* pOldWnd) { COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this); if (pActiveItem != NULL && pActiveItem->GetItemState() == COleClientItem::activeUIState) { // 如果该项处于同一视图中,则需要将焦点设置到该项 CWnd* pWnd = pActiveItem->GetInPlaceWindow(); if (pWnd != NULL) { pWnd->SetFocus(); // 不要调用基类 return; } } CView::OnSetFocus(pOldWnd); }