创建ATL组件之后,添加简单ATL对象,添加对话框资源,随后发现没有m_hWnd句柄,不响应初始化函数。
于是重新创建ATL组件,之后添加ATL控件,添加对话框资源,有m_hWnd句柄,但仍然不响应初始化函数,却有其它几乎所有的消息映射,这就怪了!
翻开旧工程时,发现消息映射中
CHAIN_MSG_MAP(CComCompositeControl<T>) //旧
与新建的工程有差别
CHAIN_MSG_MAP(CComControl<T>) //新
于是查ccomcontrol类型,发现新大陆:
对话框具有m_hWnd句柄与
public CAxDialogImpl<T>,
并没有关系
而是由于继承了
public CComControl<T>
同时
public CComCompositeControl<T>
是从CComControl<T> 继承而来,并且此类用法极具技巧性,见前一篇随笔。
将消息链换成 CComCompositeControl<T>后,能响应初始化,查看其源码,可见该类中有oninitdialog的实现