网站解析怎么设置,东莞建域名网站,在微信怎么开发公众号,重庆网站建设技术原文
WTL学习注意–活扩
在Win32下,活扩控件已是个成熟的概念了,即使对COM不太了解,使用活扩控件仍是件容易的事情.既然是控件,无非要关注两个方面,第一是如何调用它的函数,其次是如何接收它的事件.
看看在WTL中,如何使用活扩控件(基本对话框):
1.创建项目时,让对话框支持活…原文
WTL学习注意–活扩
在Win32下,活扩控件已是个成熟的概念了,即使对COM不太了解,使用活扩控件仍是件容易的事情.既然是控件,无非要关注两个方面,第一是如何调用它的函数,其次是如何接收它的事件.
看看在WTL中,如何使用活扩控件(基本对话框):
1.创建项目时,让对话框支持活扩.从代码中,可发现一些差异:
//对话框从CAxDialogImpl继承,而不是从CdialogImpl继承:
class CMainDlg : public CAxDialogImplCMainDlg, public CUpdateUICMainDlg,
public CMessageFilter, public CidleHandler
//起动时初始ActiveX:
AtlAxWinInit()2.打开对话框资源,向对话框时插入WebBrowser控件.可发现rc文件中多了一项:
CONTROL ,IDC_EXPLORER,{8856F961-340A-11D0A96B-00C04FD705A2},
WS_TABSTOP,7,7,198,174
#import C:/WINNT/System32/shdocvw.dll3.调用控件的函数,CAxDialogImpl实现了一个QueryControl函数,通过它可查询到控件的接口,然后通过该接口指针访问对象.
CAxWindow wndIE GetDlgItem(IDC_EXPLORER);
CComPtrIWebBrowser2 pWB2;
HRESULT hr wndIE.QueryControl ( pWB2 );
if ( pWB2 )
{CComVariant v; //空变量pWB2-Navigate ( CComBSTR(http://blog.csdn.net/absurd/),v, v, v, v );
}4.处理控件的事件,在对话框资源上,通过鼠标右键为控件加入处理事件函数,会有类似如下的代码:
//导入类型库,需要把后面那些参数删除才能编译过.
#import C:/WINNT/System32/shdocvw.dll raw_interfaces_only, raw_native_types, no_namespace, named_guids
//让对话框从IdispEventImpl继承过来
class CMainDlg : public CAxDialogImplCMainDlg, public CUpdateUICMainDlg,
public CMessageFilter, public CIdleHandler,
public IDispEventImplIDC_EXPLORER, CMainDlg
//增加事件映射
BEGIN_SINK_MAP(CMainDlg)//确保事件处理器有__stdcall调用约定SINK_ENTRY(IDC_EXPLORER, 0x68, OnDownloadCompleteExplorer)
END_SINK_MAP()//增加处理事件函数
VOID __stdcall OnDownloadCompleteExplorer()
{//待办:为事件处理器添加代码.MessageBox(download ok);
}5.还要在OnInitDialog做些初化工作,事件才能生效.
AtlAdviseSinkMap ( this, true );6.最后在CloseDialog中做些反初化工作:
AtlAdviseSinkMap ( this, false );