CSDN论坛 > VC/MFC > 基础类

怪事!ATL(或者说DLL)不支持CDHTMLDialog? [问题点数:50分,结帖人triout]

Bbs4
本版专家分:1014
结帖率 98.88%
CSDN今日推荐
Bbs4
本版专家分:1014
Bbs4
本版专家分:1014
Bbs4
本版专家分:1670
Bbs4
本版专家分:1014
Bbs4
本版专家分:1014
Bbs4
本版专家分:1014
Bbs7
本版专家分:18918
Bbs2
本版专家分:382
Bbs1
本版专家分:23
Bbs4
本版专家分:1014
匿名用户不能发表回复!
其他相关推荐
对于CDHtmlDialog和JavaScript、HTML配合使用的一些技术总结
转自:http://blog.csdn.net/pjl1119/article/details/7713892 CDHtmlDialog可以方便的将网页嵌入对话框,使得在程序设计中人机界面(DHTML网页)与控制逻辑(CDialog)可以很好的分离。   1、屏蔽安全性提示,不再弹出控件是否安全的提示框。 重载CanAccessExternal()函数,直接 return
CDHtmlDialog获取控件内容
//获取指定ID的 Input 控件的值,如输入框 BOOL CAnalyzeHtm::GetInputElementText(CString & str,const CString & id,CDHtmlDialog * dlg) { CComPtr<IHTMLInputElement> input = NULL; if(dlg->GetElementInterface(id,&i
ATL 封装MFC对话框
创建ATL工程,将MFC对话框封装进ATL中,并在实例程序中调用此对话框,相比MFC的DLL,减少了好多操作。不用手动切换主程序和Dll的状态,非常方便。
ATL实现的CDHtmlDialog模板类
ATL发展到现在,从未提供像MFC中的CDHtmlDialog一样的HTML页面布局且方便开发者使用的窗口基类,虽然也有DHtml Control可供使用,但并不能像MFC那样通过宏映射来方便地让开发者与页面元素之间进行任意的双向交互,尤其是需要响应页面元素事件的时候,ATL/WTL爱好者必须自己编写相应的代码来完成这些工作。<br><br>基于这个原因,通过理解分析MFC中CDHtmlDialog类的功能和实现行为,这里完全使用ATL一样的实现机制来模仿MFC中实现的功能编写了一个头文件,使ATL爱好者在无需MFC庞大的支持库的情形下实现跟CDHtmlDialog一样的功能,并且扩展了其能力。<br><br>下载的压缩包中只有一个头文件 atldhtmldlg.h,头文件的开始部分是一段开发者使用示例的注释,以方便开发者容易地上手。这个文件提供了若干个类和模板类,开发者只需关注其中两个模板类:CDHtmlDialogImpl<>和CMultiPageDHtmlDialogImpl<>,第一个模板类实现了WEB页面布局的对话框,第二个模板类以第一个类为基础,扩展成了在一个对话框中支持多个页面。<br><br>使用方式非常简单,从上述两个模板类之一继承实现一个对话框类,然后添加相应的映射宏,实现宏映射中的方法即可构造一个完美、表现能力强、控制方便的对话框窗口,例子代码像下面这样:<br><br>class CMainDlg : public CDHtmlDialogImpl<CMainDlg><br>{<br> ......<br> // 实现页面元素事件的处理<br> // 请注意响应函数原型定义:HRESULT Foo(IHTMLElement*)<br> BEGIN_DHTML_EVENT_MAP(CMainDlg)<br> DHTML_EVENT_ONCLICK(_T("elementid1"), OnClick)<br> DHTML_EVENT_ONMOUSEMOVE(_T("elementid2"), OnMouseMove)<br> DHTML_EVENT_ELEMENT(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER, _T("elementid"), OnMouseOver) // id为elementid的元素事件响应<br> DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER, _T("myclass"), OnMouseOver) // class为myclass的元素事件响应<br> DHTML_EVENT_TAG(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER, _T("div"), OnMouseOver) // 所有DIV元素的onmouseover事件响应<br> DHTML_EVENT_AXCONTROL(controlMethodDISPID, _T("objectid"), OnControlMethod) // ActiveX控件事件响应<br> END_DHTML_EVENT_MAP()<br><br> // 实现外部DISPATCH方法,能在这里添加任意的方法供页面中的脚本调用<br> // 调用方式如下:window.external.about(123, "abc")<br> // 请注意响应函数的原型定义:void Foo(VARIANT*,VARIANT*,VARIANT*)<br> // 目前仅仅定义了三个参数,一般也足够使用了。如果脚本实际调用中只提供了2个参数,则第三个指针参数是NULL。以此类推<br> BEGIN_EXTERNAL_METHOD_MAP(CMainDlg)<br> EXTERNAL_METHOD(_T("about"), OnAbout)<br> END_EXTERNAL_METHOD_MAP()<br> void OnAbout(VARIANT* para1, VARIANT* para2, VARIANT* para3)<br> {<br> // your code is here.<br> }<br><br> HRESULT OnClick(IHTMLElement *pElement)<br> {<br> // your code is here.<br> return S_OK;<br> }<br> HRESULT OnMouseMove(IHTMLElement *pElement)<br> {<br> // your code is here.<br> return S_OK;<br> }<br> ......<br>}<br><br>除了上面的例子,还有CMultiPageDHtmlDialogImpl中的一些映射宏,以及还有一些虚函数可供重载。<br><br>对话框设计好后,调用方法也很简单,例子如下:<br> CMainDlg dlg;<br> dlg.m_nHtmlResID = IDR_YOUR_HTML_RESOURCE_ID; // open your resource<br> or<br> dlg.m_szHtmlResID = _T("C:\\yourname.html"); // open your resource<br> or<br> dlg.m_strCurrentUrl = _T("www.microsoft.com"); // open local html file or external URL<br> dlg.Create(NULL); // or dlg.DoModal(NULL);<br><br>好了,介绍就到这里,如果有更多疑问,请下载头文件查看源代码以及注释,本次下载的文件版本是 1.02。<br><br>当前版本的一个缺憾是尚未支持DDX/DDV,原因是ATL并未提供DDX机制,下个版本将完全仿照WTL的方式实现该类的DDX/DDV。另外为了通用性以及减少依赖,代码中完全未使用CString或CAtlString,主要是MFC、ATL、WTL各自提供了自己的CString实现。<br><br>版权特别声明:本软件源码完全属作者James(胡柏华)自创,作者拥有修改和变更代码特性的权利,任何团体或个人均可以自由下载并免费使用。如用于商业用途,请在所属商业软件的版权声明中加注本声明。使用者使用本源码的过程中产生的任何错误,作者并无义务提供技术支持,由此导致的任何损失,作者概不负责。<br><br>2007-11-7
CDHtmlDialog 与 网页交互技巧
CDHtmlDialog可以方便的将网页嵌入对话框,使得在程序设计中人机界面(DHTML网页)与控制逻辑(CDialog)可以很好的分离,下面是一些实用技术与技巧。1.将数据验证任务完全交给JavaScript,Dialog只做有意义的事。 input type="button" id="button1" onclick="if(validate()); window.event.ca
ATL工程编译后自动注册的设置
ATL工程编译自动注册设置的修改我们在用VS2010(其它版本也一样)创建的ATL工程,每次编译出来文件后都会自动注册,这样很方便,省去了我们手动注册的麻烦。 n比如我们要写一个Office的插件,有了这个自动注册,我们每次编译完后打开Office程序就可以使用我们的插件了。 n但是某些情况下我们又不想让VS帮我们自动注册,比如编译release版本的时候。Release版本一般是发布或者给测试使用
JS调用ATL COM中的C++接口的做法
JS调用ATL COM中的C++接口的做法。
vba调用vs2005使用atl开发的com组件
1、新建工程 New -- Project -- ATL Project 勾选Allow merging of proxy/stub code 2、添加接口 右键工程 --  Add  --  ATL Simple Object 3、添加接口函数 类视图中,右键接口 --  Add  --  Add Method 4、添加事件 类视图中,展开类型库,
如何用Delphi调用由VC开发的ATL/COM服务,并响应其事件
现在有一个由VC开发的ATL/COM服务(EXE或DLL形式均可),该服务提供了一个方法及一个事件。现欲使用Delphi来调用该服务,方法就已经可以正常使用了,但是不知道怎样响应事件(使用VB及VC的调用都已经可以正常使用该服务的方法及事件了)。服务提供的方法及事件如下(VC中的定义):方法:  SetData(LONG iData);事件:  ReceiveData(LONG iData);--
javascript调用COM组件,"错误: 对象不支持此属性或方法"
找到解决办法了,来源如下,论坛自己不能连续回复,就贴在这里了。好像是第一篇哦 http://blog.163.com/danshiming@126/blog/static/10941274820114811312523/ http://www.d3sw.cn/Blog/article.asp?id=244 http://www.cnblogs.com/phinecos/archive/200
关闭
关闭