📄 axdoccontaineritem.cpp
字号:
OLECMDTEXT* pcmdtext)
{
METHOD_PROLOGUE_EX_(CAXDocContFrameHook, OleCommandTarget)
HRESULT hr=NOERROR;
COleCmdUI state(rgCmds, cCmds, pguidCmdGroup);
if (pcmdtext == NULL)
state.m_nCmdTextFlag = 0;
else
state.m_nCmdTextFlag = pcmdtext->cmdtextf;
for (state.m_nIndex = 0; state.m_nIndex < cCmds; state.m_nIndex++)
{
state.m_nID = rgCmds[state.m_nIndex].cmdID;
state.DoUpdate(AfxGetMainWnd(), TRUE);
}
if (pcmdtext != NULL && pcmdtext->rgwz != NULL &&
(pcmdtext->cmdtextf != OLECMDTEXTF_NONE))
{
USES_CONVERSION;
ASSERT(cCmds == 1);
state.m_strText = state.m_strText.Right(pcmdtext->cwBuf-1);
pcmdtext->cwActual = state.m_strText.GetLength();
#ifdef _UNICODE
lstrcpyW(pcmdtext->rgwz, (LPCTSTR) state.m_strText);
#elif defined(OLE2ANSI)
lstrcpy(pcmdtext->rgwz, state.m_strText);
#else
lstrcpyW(pcmdtext->rgwz, T2W((LPCTSTR) state.m_strText));
#endif
}
return hr;
}
STDMETHODIMP CAXDocContFrameHook::XOleCommandTarget::Exec(const GUID* pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
VARIANTARG* pvarargIn, VARIANTARG* pvarargOut)
{
METHOD_PROLOGUE_EX_(CAXDocContFrameHook, OleCommandTarget);
HRESULT hr=NOERROR;
OLECMD cmd;
COleCmdUI state(&cmd, 1, pguidCmdGroup);
state.m_nIndex = 0;
cmd.cmdf = 0;
cmd.cmdID = nCmdID;
state.m_nID = nCmdID;
// help via Doc Object targeting is not supported
if (nCmdExecOpt == OLECMDEXECOPT_SHOWHELP)
hr = OLECMDERR_E_DISABLED;
else
{
// is the command supported?
if (!state.DoUpdate(AfxGetMainWnd(), TRUE))
hr = OLECMDERR_E_NOTSUPPORTED;
else
{
if (cmd.cmdf & OLECMDF_ENABLED)
{
if (AfxGetMainWnd()->OnCmdMsg(state.m_nID, CN_COMMAND, NULL, NULL))
hr = S_OK;
else
hr = E_FAIL;
}
else
hr = OLECMDERR_E_DISABLED;
}
}
return hr;
}
/////////////////////////////////////////////////////////////////////////////
// CAXDocContainerCntrItem::XOleIPSiteEx implementation
STDMETHODIMP_(ULONG) CAXDocContainerCntrItem::XOleIPSiteEx::AddRef()
{
METHOD_PROLOGUE_EX_(CAXDocContainerCntrItem, OleIPSiteEx)
return pThis->ExternalAddRef();
}
STDMETHODIMP_(ULONG) CAXDocContainerCntrItem::XOleIPSiteEx::Release()
{
METHOD_PROLOGUE_EX_(CAXDocContainerCntrItem, OleIPSiteEx)
return pThis->ExternalRelease();
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::QueryInterface(
REFIID iid, LPVOID* ppvObj)
{
METHOD_PROLOGUE_EX_(CAXDocContainerCntrItem, OleIPSiteEx)
return pThis->ExternalQueryInterface(&iid, ppvObj);
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::GetWindow(HWND* lphwnd)
{
METHOD_PROLOGUE_EX_(CAXDocContainerCntrItem, OleIPSiteEx)
*lphwnd = pThis->m_pView->GetSafeHwnd();
return *lphwnd != NULL ? S_OK : E_FAIL;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::ContextSensitiveHelp(
BOOL fEnterMode)
{
METHOD_PROLOGUE_EX_(CAXDocContainerCntrItem, OleIPSiteEx)
if (pThis->m_pInPlaceFrame == NULL)
return E_UNEXPECTED;
// simply delegate to frame window implementation
return pThis->m_pInPlaceFrame->
m_xOleInPlaceFrame.ContextSensitiveHelp(fEnterMode);
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::CanInPlaceActivate()
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
return pThis->CanActivate() ? S_OK : S_FALSE;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::OnInPlaceActivate()
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
ASSERT_VALID(pThis);
SCODE sc = E_UNEXPECTED;
TRY
{
pThis->OnActivate();
sc = S_OK;
}
END_TRY
return sc;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::OnUIActivate()
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
ASSERT_VALID(pThis);
SCODE sc = E_UNEXPECTED;
TRY
{
pThis->OnActivateUI();
sc = S_OK;
}
END_TRY
return sc;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::GetWindowContext(
LPOLEINPLACEFRAME* lplpFrame,
LPOLEINPLACEUIWINDOW* lplpDoc,
LPRECT lpPosRect, LPRECT lpClipRect,
LPOLEINPLACEFRAMEINFO lpFrameInfo)
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
ASSERT_VALID(pThis);
*lplpFrame = NULL; // init these in-case of mem-alloc failure
*lplpDoc = NULL;
CFrameWnd* pMainFrame = NULL;
CFrameWnd* pDocFrame = NULL;
SCODE sc = E_UNEXPECTED;
TRY
{
// get position of the item relative to activation view
CRect rect;
pThis->OnGetItemPosition(rect);
::CopyRect(lpPosRect, &rect);
pThis->OnGetClipRect(rect);
::CopyRect(lpClipRect, &rect);
// get the window context information
if (pThis->OnGetWindowContext(&pMainFrame, &pDocFrame, lpFrameInfo))
{
// hook IOleInPlaceFrame interface to pMainFrame
if (pThis->m_pInPlaceFrame == NULL)
pThis->m_pInPlaceFrame = new CAXDocContFrameHook(pMainFrame, pThis);
pThis->m_pInPlaceFrame->InternalAddRef();
*lplpFrame = (LPOLEINPLACEFRAME)pThis->m_pInPlaceFrame->
GetInterface(&IID_IOleInPlaceFrame);
// save accel table for IOleInPlaceFrame::TranslateAccelerators
pThis->m_pInPlaceFrame->m_hAccelTable = lpFrameInfo->haccel;
// hook IOleInPlaceUIWindow to pDocFrame
if (pDocFrame != NULL)
{
if (pThis->m_pInPlaceDoc == NULL)
pThis->m_pInPlaceDoc = new CAXDocContFrameHook(pDocFrame, pThis);
pThis->m_pInPlaceDoc->InternalAddRef();
*lplpDoc = (LPOLEINPLACEUIWINDOW)pThis->m_pInPlaceDoc->
GetInterface(&IID_IOleInPlaceUIWindow);
}
sc = S_OK;
}
}
CATCH_ALL(e)
{
// cleanup memory that may be partially allocated
delete *lplpFrame;
ASSERT(*lplpDoc == NULL);
e->Delete();
}
END_CATCH_ALL
return sc;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::Scroll(SIZE scrollExtent)
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
ASSERT_VALID(pThis);
SCODE sc = E_UNEXPECTED;
TRY
{
if (!pThis->OnScrollBy(CSize(scrollExtent)))
sc = S_FALSE;
else
sc = S_OK;
}
END_TRY
return sc;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::OnUIDeactivate(BOOL fUndoable)
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
ASSERT_VALID(pThis);
SCODE sc = E_UNEXPECTED;
TRY
{
pThis->OnDeactivateUI(fUndoable);
sc = S_OK;
}
END_TRY
return sc;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::OnInPlaceDeactivate()
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
ASSERT_VALID(pThis);
SCODE sc = E_UNEXPECTED;
TRY
{
pThis->OnDeactivate();
sc = S_OK;
}
END_TRY
return sc;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::DiscardUndoState()
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
ASSERT_VALID(pThis);
SCODE sc = E_UNEXPECTED;
TRY
{
pThis->OnDiscardUndoState();
sc = S_OK;
}
END_TRY
return sc;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::DeactivateAndUndo()
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
ASSERT_VALID(pThis);
SCODE sc = E_UNEXPECTED;
TRY
{
pThis->OnDeactivateAndUndo();
sc = S_OK;
}
END_TRY
return sc;
}
STDMETHODIMP CAXDocContainerCntrItem::XOleIPSiteEx::OnPosRectChange(
LPCRECT lpPosRect)
{
METHOD_PROLOGUE_EX(CAXDocContainerCntrItem, OleIPSiteEx)
ASSERT_VALID(pThis);
SCODE sc = E_UNEXPECTED;
TRY
{
CRect rect;
rect.CopyRect(lpPosRect);
pThis->OnChangeItemPosition(rect);
sc = S_OK;
}
END_TRY
return sc;
}
/////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -