2506,wtl的通知事件
通知事件
最后一步
,通知(连接
)控件CMainDlg
想要接受的浏览器
控件触发的消息.连接
在OnInitDialog()
,断开
在OnDestroy()
.
VC6中连接
VC6
中,ATL
的全局函数
,AtlAdviseSinkMap()
通知(连接
)对话框中所有控件
开始或终止发送事件
到C++
对象.
该该函数
的第一个参数
是一个指向拥有事件映射链
的C++
对象指针(一般是本
),第二个参数
是一个极
变量,如果为真
表示该对象开始接收事件
,否则表示终止接收事件
.
要使用该函数
,需要处理WM_INITDIALOG
和WM_DESTROY
消息,并如下调用:
BOOL CMainDlg::OnInitDialog(...)
{//开始沉事件AtlAdviseSinkMap ( this, true );
}void CMainDlg::OnDestroy()
{//停止沉事件AtlAdviseSinkMap ( this, false );
}
AtlAdviseSinkMap()
返回一个表示是否成功执行函数
的HRESULT
.如果OnInitDialog()
中AtlAdviseSinkMap()
执行失败,则无法接收一些(或所有)活扩
控件的事件.
VC7中连接
VC7
中,CAxDialogImpl
提供了一个封装AtlAdviseSinkMap()
的方法:AdviseSinkMap()
.AdviseSinkMap()
只有一个极
型参数,它与AtlAdviseSinkMap()
的第二个参数
意义相同.
AdviseSinkMap()
检查拥有事件映射表
的类,并调用AtlAdviseSinkMap()
.
与VC6
不同是CAxDialogImpl
已处理了WM_INITDIALOG
和WM_DESTROY
消息,并调用了AdviseSinkMap()
,因此只需在CMainDlg
的消息映射表
的开始部分添加上CHAIN_MSG_MAP
宏.
BEGIN_MSG_MAP(CMainDlg)CHAIN_MSG_MAP(CAxDialogImpl<CMainDlg>)//`消息映射`的`其余部分`...END_MSG_MAP()