[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)这个方法,可以调到,但总是报参数出错 |
相关讨论
相关资源推荐
- SOCKET网络编程服务器端和客户端代码(同步通信)
- socket、WebSocket的使用,前后端发送消息的例子
- WebSocket实现前后端通讯-java
- 【Socket API】实现一个简单的HTTP客户端调用
- Socket API使用——模拟http协议
- java socket http服务器_使用Java Socket手撸一个http服务器
- Java Socket编写http服务器
- Java实战:一文搞懂 TCP、HTTP、Socket、Socket 连接池
- JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
- java socket 实现 http_Java Socket 实现HTTP服务器核心