[Template及应用] ActiveX如何获取页面参数

nj_first 2007-11-17
// ActiveXTestCtrl.cpp : CActiveXTestCtrl ActiveX 控件类的实现。

#include "stdafx.h"
#include "ActiveXTest.h"
#include "ActiveXTestCtrl.h"
#include "ActiveXTestPropPage.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif


IMPLEMENT_DYNCREATE(CActiveXTestCtrl, COleControl)



// 消息映射

BEGIN_MESSAGE_MAP(CActiveXTestCtrl, COleControl)
ON_OLEVERB(AFX_IDS_VERB_EDIT, OnEdit)
ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
END_MESSAGE_MAP()



// 调度映射

BEGIN_DISPATCH_MAP(CActiveXTestCtrl, COleControl)
DISP_FUNCTION_ID(CActiveXTestCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
DISP_FUNCTION_ID(CActiveXTestCtrl, "add", -10000, add, VT_INT, VTS_I2 VTS_I2)
END_DISPATCH_MAP()



// 事件映射

BEGIN_EVENT_MAP(CActiveXTestCtrl, COleControl)
END_EVENT_MAP()



// 属性页

// TODO: 按需要添加更多属性页。请记住增加计数!
BEGIN_PROPPAGEIDS(CActiveXTestCtrl, 1)
PROPPAGEID(CActiveXTestPropPage::guid)
END_PROPPAGEIDS(CActiveXTestCtrl)



// 初始化类工厂和 guid

IMPLEMENT_OLECREATE_EX(CActiveXTestCtrl, "ACTIVEXTEST.ActiveXTestCtrl.1",
0x5d2375a9, 0x1e69, 0x47c1, 0xb0, 0x78, 0xb6, 0x78, 0xb1, 0x69, 0x4e, 0x3e)



// 键入库 ID 和版本

IMPLEMENT_OLETYPELIB(CActiveXTestCtrl, _tlid, _wVerMajor, _wVerMinor)



// 接口 ID

const IID BASED_CODE IID_DActiveXTest =
{ 0xA98449F5, 0x5560, 0x4E9A, { 0x8B, 0x9C, 0x5F, 0xD, 0xAD, 0x59, 0x55, 0x79 } };
const IID BASED_CODE IID_DActiveXTestEvents =
{ 0x6231F787, 0xEAA7, 0x48A7, { 0xBC, 0x90, 0xC5, 0x6, 0xE5, 0x49, 0xD9, 0x48 } };



// 控件类型信息

static const DWORD BASED_CODE _dwActiveXTestOleMisc =
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;

IMPLEMENT_OLECTLTYPE(CActiveXTestCtrl, IDS_ACTIVEXTEST, _dwActiveXTestOleMisc)



// CActiveXTestCtrl::CActiveXTestCtrlFactory::UpdateRegistry -
// 添加或移除 CActiveXTestCtrl 的系统注册表项

BOOL CActiveXTestCtrl::CActiveXTestCtrlFactory::UpdateRegistry(BOOL bRegister)
{
// TODO: 验证您的控件是否符合单元模型线程处理规则。
// 有关更多信息,请参考 MFC 技术说明 64。
// 如果您的控件不符合单元模型规则,则
// 必须修改如下代码,将第六个参数从
// afxRegInsertable | afxRegApartmentThreading 改为 afxRegInsertable。

if (bRegister)
return AfxOleRegisterControlClass(
AfxGetInstanceHandle(),
m_clsid,
m_lpszProgID,
IDS_ACTIVEXTEST,
IDB_ACTIVEXTEST,
afxRegInsertable | afxRegApartmentThreading,
_dwActiveXTestOleMisc,
_tlid,
_wVerMajor,
_wVerMinor);
else
return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}



// 授权字符串

static const TCHAR BASED_CODE _szLicFileName[] = _T("ActiveXTest.lic");

static const WCHAR BASED_CODE _szLicString[] =
L"Copyright (c) 2007 ";



// CActiveXTestCtrl::CActiveXTestCtrlFactory::VerifyUserLicense -
// 检查是否存在用户许可证

BOOL CActiveXTestCtrl::CActiveXTestCtrlFactory::VerifyUserLicense()
{
return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName,
_szLicString);
}



// CActiveXTestCtrl::CActiveXTestCtrlFactory::GetLicenseKey -
// 返回运行时授权密钥

BOOL CActiveXTestCtrl::CActiveXTestCtrlFactory::GetLicenseKey(DWORD dwReserved,
BSTR FAR* pbstrKey)
{
if (pbstrKey == NULL)
return FALSE;

*pbstrKey = SysAllocString(_szLicString);
return (*pbstrKey != NULL);
}



// CActiveXTestCtrl::CActiveXTestCtrl - 构造函数

CActiveXTestCtrl::CActiveXTestCtrl()
{
InitializeIIDs(&IID_DActiveXTest, &IID_DActiveXTestEvents);
// TODO: 在此初始化控件的实例数据。
}



// CActiveXTestCtrl::~CActiveXTestCtrl - 析构函数

CActiveXTestCtrl::~CActiveXTestCtrl()
{
// TODO: 在此清理控件的实例数据。
}



// CActiveXTestCtrl::OnDraw - 绘图函数

void CActiveXTestCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;

// TODO: 用您自己的绘图代码替换下面的代码。
pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
pdc->Ellipse(rcBounds);
}



// CActiveXTestCtrl::DoPropExchange - 持久性支持

void CActiveXTestCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);

// TODO: 为每个持久的自定义属性调用 PX_ 函数。
}



// CActiveXTestCtrl::OnResetState - 将控件重置为默认状态

void CActiveXTestCtrl::OnResetState()
{
COleControl::OnResetState();  // 重置 DoPropExchange 中找到的默认值

// TODO: 在此重置任意其他控件状态。
}



// CActiveXTestCtrl::AboutBox - 向用户显示“关于”框

void CActiveXTestCtrl::AboutBox()
{
CDialog dlgAbout(IDD_ABOUTBOX_ACTIVEXTEST);
dlgAbout.DoModal();
}



// self_func

int CActiveXTestCtrl::add(int a, int b)
{
return 0;
}



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>ActiveX测试</title>
</head>
<object id="MYAvtiveX" classid="clsid:5D2375A9-1E69-47C1-B078-B678B1694E3E" > </object>
<body>
<input type="button" onclick="add()" value='Click'>
<script language="javascript">
function add()
{
alert("step1");
alert("test:" +  MYAvtiveX.add(1, 2));
alert("step2");
}
</script>
</body>
</html>


我在这个html中像调用ActiveX中的add(a, b)这个方法,可以调到,但总是报参数出错
Global site tag (gtag.js) - Google Analytics