VS2003模板的下载与使用和注意事项

本文讲述VS2003模板的具体细节,怎样创建VS2003模板。这些内容都是我这些天花了一周的时间查阅资料并像IT精英学习出来的,中间可能有不少的错误,欢迎大家指正。下面就说明下。

为张家港等地区用户提供了全套网页设计制作服务,及张家港网站建设行业解决方案。主营业务为网站设计、成都网站设计、张家港网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

VS2003模板升级的基本过程如下:

1、首先备份现有的VC程序,备份之后启动VS2005。

2、通过VS2005打开要升级的解决方案,系统提示自动转换,如果VC程序已经被嵌入到VSS中,则系统将提示登录VSS,并且自动将解决方案文件和项目文件签出。(注意选择备份原来版本 的解决方案的选项。)

3、一般情况下系统提示成功,可能会有两个警告,可以不予理会。因为升级过程中仅仅修改了解决方案文件和工程项目文件,所以速度会很快,C++头文件和CPP文件都不作任何修改(这和VB6到VB2005的升级不同),因此速度很快。

4、在VS2005中重新编译升级后的程序,很可能出现很多警告和错误提示,警告可以不予理会,错误提示必须修改。我所遇到的错误提示主要有两种:一种提示是“某个变量没有定义”,另外一种是模板类的消息映射的错误提示。

先说第一种错误提示,例如如下的两个for循环语句

 
 
  1. for(int i=0;i<10;i++)  
  2. {  
  3. }  
  4. for(i=0;i<100;i++)//此处将提示i没有定义  

上面的语句在VS2003中没有问题,在2005中则是错误的,2005将i作为第一个for循环中的局部变量处理,因此编译器认为第二个for循环中的i没有定义。这类错误可能有很多,但是修改起来比较容易。

VS2003模板第二种错误是模板类的消息映射宏错误。我在程序中设计了一个控件模板:

 
 
  1. template  B,class P>class CUniDataCtrl : public B,public CUniDataBaseCtrl  #t#

则直接实现了原来几十行代码实现的功能。

上述的模板类消息映射宏我是参考BEGIN_TEMPLATE_MESSAGE_MAP(theClass, type_name, baseClass)编写的,该宏只支持一个模板参数,而我定义的模板中需要两个模板参数,因此,我自己扩充了一下VS2003模板的内容。关于BEGIN_TEMPLATE_MESSAGE_MAP的帮助在MSDN中好像没有,在afxwin.h中定义了:

 
 
  1. #define BEGIN_TEMPLATE_MESSAGE_MAP_EX(theClass, type_name1,type_name2,  baseClass)     
  2.  PTM_WARNING_DISABLE                
  3.  template < typename type_name1,typename type_name2 >             
  4.  const AFX_MSGMP* theClass< type_name1 ,type_name2 >::GetMessageMap() const     
  5.   { return GetThisMessageMap(); }            
  6.  template < typename type_name1 ,typename type_name2>             
  7.  const AFX_MSGMAP* PASCAL theClass< type_name1 ,type_name2  >::GetThisMessageMap()    
  8.  {                    
  9.   typedef theClass< type_name1 ,type_name2  > ThisClass;         
  10.   typedef baseClass TheBaseClass;            
  11.   static const AFX_MSGMAP_ENTRY _messageEntries[] =    
  12.   {  
  13.  
  14. BEGIN_TEMPLATE_MESSAGE_MAP_EX(CUniDataCtrl,B,P ,B)  
  15.  ON_WM_LBUTTONDOWN()  
  16.  ON_WM_RBUTTO  
  17.  
  18. #define DECLARE_MESSAGE_MAP()   
  19. protected:   
  20.  static const AFX_MSGMAP* PASCAL GetThisMessageMap();   
  21.  virtual const AFX_MSGMAP* GetMessageMap() const;   
  22.  
  23. #define BEGIN_TEMPLATE_MESSAGE_MAP(theClass, type_name, baseClass)     
  24.  PTM_WARNING_DISABLE                
  25.  template < typename type_name >             
  26.  const AFX_MSGMAP* theClass< type_name >::GetMessageMap() const     
  27.   { return GetThisMessageMap(); }            
  28.  template < typename type_name >             
  29.  const AFX_MSGMAP* PASCAL theClass< type_name >::GetThisMessageMap()    
  30.  {                    
  31.   typedef theClass< type_name > ThisClass;         
  32.   typedef baseClass TheBaseClass;            
  33.   static const AFX_MSGMAP_ENTRY _messageEntries[] =       
  34.   {  
  35. #define BEGIN_MESSAGE_MAP(theClass, baseClass)   
  36.  PTM_WARNING_DISABLE   
  37.  const AFX_MSGMAP* theClass::GetMessageMap() const   
  38.   { return GetThisMessageMap(); }   
  39.  const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap()   
  40.  {   
  41.   typedef theClass ThisClass;           
  42.   typedef baseClass TheBaseClass;  
  43.   static const AFX_MSGMAP_ENTRY _messageEntries[] =    
  44.   {  
  45. #define END_MESSAGE_MAP()   
  46.   {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }   
  47.  };   
  48.   static const AFX_MSGMAP messageMap =   
  49.   { &TheBaseClass::GetThisMessageMap, &_messageEntries[0] };   
  50.   return &messageMap;  
  51.  }     
  52.  PTM_WARNING_RESTORE  

网页标题:VS2003模板的下载与使用和注意事项
文章路径:http://www.36103.cn/qtweb/news28/22028.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联