您的位置:首页 > 其它

探索WTL和MFC混合使用的问题,兼容VC2010编译器

2011-05-07 18:30 447 查看
MFC和WTL写界面都有优缺点.MFC编程快速,WTL灵活.目前工作是为了实现即时通信的UI,但是一些特效用MFC实现是相当困难的,例如对话框针对控件的分隔条.但是WTL则处理的相当好,但是两者一般是不能混合编程的.

探索几天,公布试验结果,整理下预编译包含文件的顺序

注意:

1.必须用ATL的CString,否则,不管你怎么折腾,MFC/WTL/ATL总是出现两两冲突,因为ATL/MFC/WTL都有CString的实现,且MFC的CString没有命名空间,再者afx.h中先包含了ATL,然后包含了MFC;

2.code时用ATL空间的对象时,必须用ATL::空间名,因为我取消了ATL的自动命名空间.

3.在C**App theApp;后要换行写WTL::CAppModule _Module;否则你用WTL模板对象的时候会中断,因为WTL程序模块对象初始化时对界面线程临界锁进行了创建等动作.

开发环境VC2010+VS2010SP1+WTL8.1

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
#pragma once
#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 从 Windows 头中排除极少使用的资料
#endif

#include "targetver.h"
#define _ATL_NO_AUTOMATIC_NAMESPACE	 //不自动用ATL空间
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h>         // MFC 核心组件和标准组件
#include <afxext.h>         // MFC 扩展
#define _WTL_NO_AUTOMATIC_NAMESPACE
#define _CSTRING_NS	WTL
#define _WTL_USE_CSTRING
#define _SECURE_ATL 1
#include <atlbase.h>
#include <atlstr.h>
#include <atlapp.h>
#include <atlframe.h>
#include <atlctrls.h>
#include <atlddx.h>
#include <atlwin.h>
#include <atlmisc.h>
extern WTL::CAppModule _Module;
#include <atlwin.h>
#include <atlctrls.h>
#include <afxdisp.h>        // MFC 自动化类

#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h>     // 功能区和控件条的 MFC 支持


希望我的探索,能给一线编程的朋友带来惊喜
!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐