📄 activescriptsite.cpp
字号:
// ActiveScriptSite.cpp: implementation of the EEActiveScriptSite class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ActiveScriptSite.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ActiveScriptSite::ActiveScriptSite()
{
m_dwRef = 1;
m_hWnd = NULL;
}
ActiveScriptSite::~ActiveScriptSite()
{
}
HRESULT ActiveScriptSite::QueryInterface(REFIID riid, void** ppvObject)
{
HRESULT hResult = S_OK;
if (riid == IID_IActiveScriptSiteWindow) {
*ppvObject = (IActiveScriptSiteWindow *) this;
} else {
*ppvObject = NULL;
hResult = E_NOTIMPL;
}
return hResult;
}
ULONG ActiveScriptSite::AddRef()
{
return ++m_dwRef;
}
ULONG ActiveScriptSite::Release()
{
if (m_dwRef == 0) return 0;
return --m_dwRef;
}
HRESULT ActiveScriptSite::GetLCID(LCID* plcid)
{
return S_OK;
}
HRESULT ActiveScriptSite::GetItemInfo(LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown** ppunkItem, ITypeInfo** ppti)
{
//使用BSTR<->ANSI转换宏
USES_CONVERSION;
BOOL bFound = FALSE;
//检验类型库,不进行处理
if (ppti)
{
*ppti = NULL;
if (dwReturnMask & SCRIPTINFO_ITYPEINFO)
{
return TYPE_E_ELEMENTNOTFOUND;
}
}
//传递了一个IUnknown接口指针
if (ppunkItem)
{
*ppunkItem = NULL;
// 查询暴露对象
if (dwReturnMask & SCRIPTINFO_IUNKNOWN)
{
for (int i = 0; i < m_ExposedObjects.GetSize(); i ++)
{
if (!m_ExposedObjects[i]->GetObjectName().CompareNoCase(OLE2T(pstrName)))
{
*ppunkItem = m_ExposedObjects[i]->GetObjectInterface();
(*ppunkItem)->AddRef();
bFound = TRUE;
break;
}
}
}
}
if (! bFound)
{
return TYPE_E_ELEMENTNOTFOUND;
}
return S_OK;
}
HRESULT ActiveScriptSite::GetDocVersionString(BSTR* pbstrVersion)
{
return S_OK;
}
HRESULT ActiveScriptSite::OnScriptTerminate(const VARIANT* pvarResult, const EXCEPINFO* pexcepInfo)
{
return S_OK;
}
HRESULT ActiveScriptSite::OnStateChange(SCRIPTSTATE ssScriptState)
{
return S_OK;
}
HRESULT ActiveScriptSite::OnScriptError(IActiveScriptError* pScriptError)
{
static BSTR pwcErrorText;
DWORD contextCookie;
ULONG lineNumber;
LONG charPosition;
CString message, additional;
//获取错误信息
pScriptError->GetSourceLineText(&pwcErrorText);
//获取脚本错误的位置
pScriptError->GetSourcePosition(&contextCookie, &lineNumber, &charPosition);
message.Format("Script error in line %ld, position %ld", lineNumber, charPosition);
m_ErrorMessages.Add(message);
if (pwcErrorText)
{
m_ErrorMessages.Add(CString(pwcErrorText));
::SysFreeString(pwcErrorText);
}
return S_OK;
}
HRESULT ActiveScriptSite::OnEnterScript(void)
{
return S_OK;
}
HRESULT ActiveScriptSite::OnLeaveScript(void)
{
return S_OK;
}
HRESULT ActiveScriptSite::GetWindow(HWND* phWnd)
{
// 首先检验活动窗口
HWND activeWindow = NULL;
CWnd* activeWnd = CWnd::GetActiveWindow();
if (activeWnd)
activeWindow = activeWnd->m_hWnd;
//检验程序主窗口
if (! activeWindow)
{
activeWnd = AfxGetMainWnd();
if (activeWnd)
{
activeWindow = activeWnd->m_hWnd;
}
}
m_hWnd = activeWindow;
*phWnd = m_hWnd;
return S_OK;
}
HRESULT ActiveScriptSite::EnableModeless(BOOL fEnable)
{
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -