文件名称:
ATL实现的CDHtmlDialog模板类
开发工具:
文件大小: 15kb
下载次数: 0
上传时间: 2007-11-07
详细说明: ATL发展到现在,从未提供像MFC中的CDHtmlDialog一样的HTML页面布局且方便开发者使用的窗口基类,虽然也有DHtml Control可供使用,但并不能像MFC那样通过宏映射来方便地让开发者与页面元素之间进行任意的双向交互,尤其是需要响应页面元素事件的时候,ATL/WTL爱好者必须自己编写相应的代码来完成这些工作。
基于这个原因,通过理解分析MFC中CDHtmlDialog类的功能和实现行为,这里完全使用ATL一样的实现机制来模仿MFC中实现的功能编写了一个头文件,使A TL爱好者在无需MFC庞大的支持库的情形下实现跟CDHtmlDialog一样的功能,并且扩展了其能力。
下载的压缩包中只有一个头文件 atldhtmldlg.h,头文件的开始部分是一段开发者使用示例的注释,以方便开发者容易地上手。这个文件提供了若干个类和模板类,开发者只需关注其中两个模板类:CDHtmlDialogImpl<>和CMultiPageDHtmlDialogImpl<>,第一个模板类实现了WEB页面布局的对话框,第二个模板类以第一个类为基础,扩展成了在一个对话框中支持多个页面。
使用方式非常简单,从上述两个模板类之一继承实现一个对话框类,然后添加相应的映射宏,实现宏映射中的方法即可构造一个完美、表现能力强、控制方便的对话框窗口,例子代码像下面这样:
class CMainDlg : public CDHtmlDialogImpl
{
......
// 实现页面元素事件的处理
// 请注意响应函数原型定义:HRESULT Foo(IHTMLElement*)
BEGIN_DHTML_EVENT_MAP(CMainDlg)
DHTML_EVENT_ONCLICK(_T("elementid1"), OnClick)
DHTML_EVENT_ONMOUSEMOVE(_T("elementid2"), OnMouseMove)
DHTML_EVENT_ELEMENT(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER, _T("elementid"), OnMouseOver) // id为elementid的元素事件响应
DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER, _T("myclass"), OnMouseOver) // class为myclass的元素事件响应
DHTML_EVENT_TAG(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER, _T("div"), OnMouseOver) // 所有DIV元素的onmouseover事件响应
DHTML_EVENT_AXCONTROL(controlMethodDISPID, _T("objectid"), OnControlMethod) // ActiveX控件事件响应
END_DHTML_EVENT_MAP()
// 实现外部DISPATCH方法,能在这里添加任意的方法供页面中的脚本调用
// 调用方式如下:window.external.about(123, "abc")
// 请注意响应函数的原型定义:void Foo(VARIANT*,VARIANT*,VARIANT*)
// 目前仅仅定义了三个参数,一般也足够使用了。如果脚本实际调用中只提供了2个参数,则第三个指针参数是NULL。以此类推
BEGIN_EXTERNAL_METHOD_MAP(CMainDlg)
EXTERNAL_METHOD(_T("about"), OnAbout)
END_EXTERNAL_METHOD_MAP()
void OnAbout(VARIANT* para1, VARIANT* para2, VARIANT* para3)
{
// your code is here.
}
HRESULT OnClick(IHTMLElement *pElement)
{
// your code is here.
return S_OK;
}
HRESULT OnMouseMove(IHTMLElement *pElement)
{
// your code is here.
return S_OK;
}
......
}
除了上面的例子,还有CMultiPageDHtmlDialogImpl中的一些映射宏,以及还有一些虚函数可供重载。
对话框设计好后,调用方法也很简单,例子如下:
CMainDlg dlg;
dlg.m_nHtmlResID = IDR_YOUR_HTML_RESOURCE_ID; // open your resource
or
dlg.m_szHtmlResID = _T("C:\\yourname.html"); // open your resource
or
dlg.m_strCurrentUrl = _T("www.microsoft.com"); // open local html file or external URL
dlg.Create(NULL); // or dlg.DoModal(NULL);
好了,介绍就到这里,如果有更多疑问,请下载头文件查看源代码以及注释,本次下载的文件版本是 1.02。
当前版本的一个缺憾是尚未支持DDX/DDV,原因是ATL并未提供DDX机制,下个版本将完全仿照WTL的方式实现该类的DDX/DDV。另外为了通用性以及减少依赖,代码中完全未使用CString或CAtlString,主要是MFC、ATL、WTL各自提供了自己的CString实现。
版权特别声明:本软件源码完全属作者James(胡柏华)自创,作者拥有修改和变更代码特性的权利,任何团体或个人均可以自由下载并免费使用。如用于商业用途,请在所属商业软件的版权声明中加注本声明。使用者使用本源码的过程中产生的任何错误,作者并无义务提供技术支持,由此导致的任何损失,作者概不负责。
2007-11-7 ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.