`
jinghuainfo
  • 浏览: 1528476 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

WTL 学习笔记 -- ActiveX

 
阅读更多

WTL 学习笔记 -- ActiveX

Win32下,ActiveX控件已经是个耳熟的概念了,即使对COM不太了解,使用ActiveX控件仍然是件容易的事件。即然是控件,无非要关注两个方面,第一是如何调用它的函数,其次是如何接收它的事件。

我们看看在WTL中如何使用ActiveX控件(基本对话框)

1. 创建项目时,让对话框支持ActiveX。从代码中,可以发现一些差异:

//对话框从CaxDialogImpl继承,而不是从CdialogImpl继承:

class CMainDlg : public CAxDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,

public CMessageFilter, public CidleHandler

//起动时初始ActiveX:

AtlAxWinInit()

2. 打开对话框资源,向对话框时插入Web Browser控件。可以发现rc文件中多了一项:

CONTROL "",IDC_EXPLORER,"{8856F961-340A-11D0-A96B-00C04FD705A2}",

WS_TABSTOP,7,7,198,174

#import "C:/WINNT/System32/shdocvw.dll"

3. 调用控件的函数, CaxDialogImpl实现了一个函数QueryControl,通过它可以查询到控件的接口,然后通过这个接口指针访问对象。

CAxWindow wndIE = GetDlgItem(IDC_EXPLORER);

CComPtr<IWebBrowser2> pWB2;

HRESULT hr = wndIE.QueryControl ( &pWB2 );

if ( pWB2 )

{

CComVariant v; // empty variant

pWB2->Navigate ( CComBSTR("http://blog.csdn.net/absurd/"),

&v, &v, &v, &v );

}

4. 处理控件的事件,在对话框资源上,通过鼠标右键为控件加入事件处理函数,会下类似如下的代码:

//import类型库,需要把后面那些参数删除才能编译过。

#import "C:/WINNT/System32/shdocvw.dll" raw_interfaces_only, raw_native_types, no_namespace, named_guids

//让对话框从IdispEventImpl继承过来

class CMainDlg : public CAxDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,

public CMessageFilter, public CIdleHandler,

public IDispEventImpl<IDC_EXPLORER, CMainDlg>

//增加事件映射

BEGIN_SINK_MAP(CMainDlg)

//Make sure the Event Handlers have __stdcall calling convention

SINK_ENTRY(IDC_EXPLORER, 0x68, OnDownloadCompleteExplorer)

END_SINK_MAP()

//增加事件处理函数

VOID __stdcall OnDownloadCompleteExplorer()

{

// TODO : Add Code for event handler.

MessageBox("download ok");

}

5. 还要在OnInitDialog做些初始化工作,事件才能生效。

AtlAdviseSinkMap ( this, true );

6. 最后在CloseDialog中做些~初始化工作:

AtlAdviseSinkMap ( this, false );

简单吧。

分享到:
评论

相关推荐

    WTL文档--技术白皮书

    WTL之父写就的WTL技术白皮书,详细讲述了WTL的来龙去脉,是很好的深入WTL的参考资料。

    WTL-GUI-Base-Classes.zip_wtl

    WTL for MFC Programmers, Part II - WTL GUI Base Classes

    WTL-Developer-Guide

    WTL developer Guide, WTL开发指南

    WTL-MFC-Win32无边框窗口.zip

    用vs2010实现的项目, 只配置了Debug模式,虽然使用的是WTL来实现界面,但是消息映射是一样的,很容易移植到MFC. 详细内容查看 https://infoworld.blog.csdn.net/article/details/91960284

    WTL起步-玩转图形界面

    WTL起步-玩转图形界面 学习ATL使用的书籍。

    wtl_wtl-implementation_of_javap-master_C++_

    使用c/c++实现javap的功能,加深对java中class结构的理解

    WTL起步-玩转图形界面

    WTL起步-玩转图形界面WTL起步-玩转图形界面WTL起步-玩转图形界面

    ATL/WTL-资源-[如何获取ListView点击的单元格区域]

    如何获取ListView点击的单元格域的项目源码,需要vs2010以上编译。博客文章所在https://blog.csdn.net/infoworld/article/details/131106482

    WTL 入门学习资料

    感谢网络前辈的无私分享,再整理...6、深入剖析WTL-如何封装Windows界面程序.doc 7、白乔原创:VC之美化界面篇 8、ComboBox的WTL移植.doc 9、窗口的子类化.docx 10、深入剖析MFC中对于Windows消息处理、运行机制.doc

    WTL80-self-Extractor

    运行WTL80.exe,程序自动将WTL所有的配置文件,生成到默认的目录下。 点击unzip.就可以直接生成文件。目录可以自己修改。

    WTL起步-玩转图形界面.pdf

    WTL起步-玩转图形界面,WTL Makes UI Programming a Joy 的中文版。pdf格式,带书签目录的,绝对是最好用的版本。

    wtl三态按钮

    wtl button类-wtl button class 基于WTL的三态按钮,易用性好,

    WTL安装包 - 蒋彩阳汉化

    最近使用WTL,使用的IDE是VS2005。觉得默认的WTL实在是不方便。在字体和图片上都不令人满意。尤其是字体,它使用的是“MS Sans Serif”字体,这种字体在中文的操作系统上显得很难看(当然这是我的个人见解)。所以...

    ATL与 WTL学习

    ATL与 WTL学习,学习两者互操作的.。

    WTL安装包 - 原版

    这是WTL原版的安装包,如果对英语比较吃力,并且难以修改其中的错误的话,可以尝试下载我的汉化版。(http://download.csdn.net/detail/jiangcaiyang123/3990563) 经测试,汉化版在VS2005和VS2008下运行良好(VS...

    WTL8.1安装包

    vs2008版本以上WTL8.1安装包,包括头文件include文件夹

Global site tag (gtag.js) - Google Analytics