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 for MFC Programmers, Part II - WTL GUI Base Classes
WTL developer Guide, WTL开发指南
用vs2010实现的项目, 只配置了Debug模式,虽然使用的是WTL来实现界面,但是消息映射是一样的,很容易移植到MFC. 详细内容查看 https://infoworld.blog.csdn.net/article/details/91960284
WTL起步-玩转图形界面 学习ATL使用的书籍。
使用c/c++实现javap的功能,加深对java中class结构的理解
WTL起步-玩转图形界面WTL起步-玩转图形界面WTL起步-玩转图形界面
如何获取ListView点击的单元格域的项目源码,需要vs2010以上编译。博客文章所在https://blog.csdn.net/infoworld/article/details/131106482
感谢网络前辈的无私分享,再整理...6、深入剖析WTL-如何封装Windows界面程序.doc 7、白乔原创:VC之美化界面篇 8、ComboBox的WTL移植.doc 9、窗口的子类化.docx 10、深入剖析MFC中对于Windows消息处理、运行机制.doc
运行WTL80.exe,程序自动将WTL所有的配置文件,生成到默认的目录下。 点击unzip.就可以直接生成文件。目录可以自己修改。
WTL起步-玩转图形界面,WTL Makes UI Programming a Joy 的中文版。pdf格式,带书签目录的,绝对是最好用的版本。
wtl button类-wtl button class 基于WTL的三态按钮,易用性好,
最近使用WTL,使用的IDE是VS2005。觉得默认的WTL实在是不方便。在字体和图片上都不令人满意。尤其是字体,它使用的是“MS Sans Serif”字体,这种字体在中文的操作系统上显得很难看(当然这是我的个人见解)。所以...
ATL与 WTL学习,学习两者互操作的.。
这是WTL原版的安装包,如果对英语比较吃力,并且难以修改其中的错误的话,可以尝试下载我的汉化版。(http://download.csdn.net/detail/jiangcaiyang123/3990563) 经测试,汉化版在VS2005和VS2008下运行良好(VS...
vs2008版本以上WTL8.1安装包,包括头文件include文件夹