ATL学习之MSDN实例制作!
来源:互联网 发布:linux编译内核步骤 编辑:程序博客网 时间:2024/06/12 22:03
1.新建以个ATL项目的工程:
工程建立之后,自动产生了相应的框架代码。
框架为我们主要生成了以下代码,引出了四个函数:
TDAPI DllCanUnloadNow(void)
{
return _AtlModule.DllCanUnloadNow();
}
// 返回一个类工厂以创建所请求类型的对象
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return _AtlModule.DllGetClassObject(rclsid, riid, ppv);
}
// DllRegisterServer - 将项添加到系统注册表
STDAPI DllRegisterServer(void)
{
// 注册对象、类型库和类型库中的所有接口
HRESULT hr = _AtlModule.DllRegisterServer();
return hr;
}
// DllUnregisterServer - 将项从系统注册表中移除
STDAPI DllUnregisterServer(void)
{
HRESULT hr = _AtlModule.DllUnregisterServer();
return hr;
}
也就是COM中几个必须的函数!
2.单击项目->添加类->ATL控件
设置为可插入,支持连接点,加入一些常用的属性
经过这个向导的设置,编译器为我们生成很多必要的代码,主要通过模板技术,生成了很多必要的代码
比如说连接点,
她通过 从这个模板类 IConnectionPointContainerImp<MyCtl> 派生,从而实现了管理连接点的接口!!!!
我们从起生成的框架代码中可以看出一些门道来!
首先是这个宏,很像MFC中的消息映射宏!
BEGIN_COM_MAP
应该是加入了一个接口映射表
COM_INTERFACE_ENTRY加入接口虚表指针!!!(不太确定! ^_^)
以后有空得慢慢研究一番!
BEGIN_COM_MAP(CPolyCtl3)
COM_INTERFACE_ENTRY(IPolyCtl3)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
......................
.......
COM_INTERFACE_ENTRY(IDataObject)
#endif
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)
#ifdef _WIN32_WCE // 要在 Windows CE 上正确加载该控件,要求 IObjectSafety
COM_INTERFACE_ENTRY_IID(IID_IObjectSafety, IObjectSafety)
#endif
END_COM_MAP()
然后是这个宏:
BEGIN_PROP_MAP(CPolyCtl3)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY("Sides", 1, CLSID_PolyProp)
#ifndef _WIN32_WCE
PROP_ENTRY("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
#endif
// 示例项
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
//具体作用尚不大清楚!
支持连接点的宏!
加入连接点接口的虚表指针!??
BEGIN_CONNECTION_POINT_MAP(CPolyCtl3)
CONNECTION_POINT_ENTRY(__uuidof(_IPolyCtl3Events))
END_CONNECTION_POINT_MAP()
消息映射宏:
BEGIN_MSG_MAP(CPolyCtl3)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
CHAIN_MSG_MAP(CComControl<CPolyCtl3>)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
- ATL学习之MSDN实例制作!
- 学习ATL编程:源于MSDN
- 学习ATL编程:源于MSDN
- 学习ATL编程:源于MSDN
- 制作网页学习之常用CSS实例
- 学习资源之MSDN Webcasts
- MSDN: MFC ATL COM ActiveX
- 通过实例学习Silverlight教程之制作图片特效(一)
- 通过实例学习Silverlight教程之制作图片特效(二)
- 微软在线文档之 ATL 自定义控件的制作
- ATL学习
- ATL 学习
- MSDN ATL教程链接,好好学习,天天向上
- MSDN学习
- ATL复合控件 实例
- ATL正则表达式实例
- msdn 委托实例
- OGRE WEB ATL ActiveX 制作
- sysctl.conf优化方案
- Struts1.x系列教程(7):Logic标签库
- VB SendKeys用法(模拟按键)
- EJB3.0实例教程多对多映射
- ASP.NET生成静态页面
- ATL学习之MSDN实例制作!
- squid 限速
- System.setOut 恢复
- 1-3章
- 为了父母,为了自己,为了承诺!
- silktest简介
- 网址记录
- C HOW TO PROGRAM!中
- 想救经济须先救股市 不要本末倒置