📄 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)
{
USES_CONVERSION;
BOOL bFound = FALSE;
// Is it expecting an ITypeInfo?
if (ppti) {
// Default to NULL
*ppti = NULL;
// Return if asking about ITypeInfo
if (dwReturnMask & SCRIPTINFO_ITYPEINFO) {
return TYPE_E_ELEMENTNOTFOUND;
}
}
// Is the engine passing a IUnknown buffer?
if (ppunkItem) {
// Default to NULL
*ppunkItem = NULL;
// Is the script looking for an IUnknown from our registered list?
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)
{
// First try to get our active window
HWND activeWindow = NULL;
CWnd* activeWnd = CWnd::GetActiveWindow();
if (activeWnd) activeWindow = activeWnd->m_hWnd;
// If active window results in nothing, try the application main window
if (! activeWindow) {
activeWnd = AfxGetMainWnd();
if (activeWnd) {
activeWindow = activeWnd->m_hWnd;
}
}
// Store window handle
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 + -