处理C ++代码中的HTMLbutton单击事件

我有一个Windows本机C ++ / Win32 / MFC对话框应用程序。 我正在使用对话框中的IE ActiveX控件来呈现一些HTML内容。 正在呈现的HTML包含一个button。 该button有一个onClick JavaScript处理程序,如下所示。

<input type="button" id="uniqueButtonID" name="uniqueButtonName" value="blue" onClick="OnButtonClick('blue');"> 

目前button的点击是由所显示的JavaScript处理程序在页面中处理的。 这一切工作。

我想,而是处理button单击对话框C ++代码。

我有一些处理对话中的其他事件的经验。 例如,下面的工作,并允许处理文档完整的事件和导航。

 BEGIN_EVENTSINK_MAP(DMyDlg, CDialog) ON_EVENT(DMyDlg, IDC_EXPLORER2, 259, DMyDlg::DocumentCompleteExplorer2, VTS_DISPATCH VTS_PVARIANT) ON_EVENT(DMyDlg, IDC_EXPLORER2, 250, DMyDlg::BeforeNavigate2, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL) END_EVENTSINK_MAP() 

这些是预先定义的众所周知的事件。 不知道如何将其转换为处理我在onClick =“”部分的button中定义的内容。

有人知道怎么做吗? 这里的动机是我有一些代码用于另一个定义一些业务逻辑的C ++应用程序。 我想在这里使用相同的业务逻辑。 目前我必须每次都把它翻译成Javascript。 如果我可以在C ++代码中处理这个事件,我可以复制/粘贴(或者通过一个DLL来重新使用),并避免Javascript翻译阶段。

Solutions Collecting From Web of "处理C ++代码中的HTMLbutton单击事件"

您将需要创建一个COM对象作为JavaScript和C ++之间的桥梁。 JavaScript初始化代码如下所示:

 var myhelper = new ActiveXObject("MyCompany.MyHelper"); 

请注意,尽管名称为“ActiveXObject”,但该对象不必是完整的ActiveX控件,只是一个COM对象。 然后在你的onClick处理程序,你可以做:

 myhelper.DoThis(); myhelper.DoThat(); 

“fun”部分是在C ++中创建COM对象 – IDL文件,ATL类,IDispatch,IUnknown以及所有我想忘记的东西。

有一件事,如果C ++代码存在于你的应用程序exe中(不是在一个单独的COM DLL中),不要忘记,当你的程序启动时,你必须为“MyCompany.MyHelper”创建一个类工厂实例并注册COM,以便JavaScript中的“新ActiveXObject”成功。

[更新1]

我应该在最初的答复中加入 – 如果可以避免,我实际上不建议这样做。 在C#和.NET之前,我们公司实际上虽然COM是一件好事,但是值得花时间和精力来学习。 今天…不是很多。

在你的情况下,你的业务逻辑在C ++和JavaScript中可能看起来像很多额外的工作 – 但至少是你可以计划,分配资源,并希望能够完成额外的工作。 一旦你走下了C ++ / COM / ActiveScripting的路径,当东西停止工作 – 没有时间限制你可能花费在追逐模糊的COM相关的问题上。 无论如何,祝你好运!