常见的MFC C++中的宏和预编译指令

 

1. _MSC_VER 定义编译器的版本。下面是一些编译器版本的_MSC_VER值(参见扩展阅读中的参考文献2的链接)  
 MS VC++ 10.0 _MSC_VER = 1600  
 MS VC++ 9.0 _MSC_VER = 1500  
 MS VC++ 8.0 _MSC_VER = 1400  
 MS VC++ 7.1 _MSC_VER = 1310  
 MS VC++ 7.0 _MSC_VER = 1300  
 MS VC++ 6.0 _MSC_VER = 1200  
 MS VC++ 5.0 _MSC_VER = 1100
MicroSoft C++ Version,#pragma预编译指令应该是在这个值大于1000的时候才出现的,所以现在的vs2008之后貌似都不用再判断这个值了。

2.#if !defined(AFX_DLGCALC_H__F42970C4_9047_11D2_8E53_006008A82731__INCLUDED_)
  #define
  AFX_DLGCALC_H__F42970C4_9047_11D2_8E53_006008A82731__INCLUDED_
  这是vc6及更低版本的防止同个头文件,被重复include之后,被重复编译的一贯做法。
  在vs2003及更高版本,可以用 #pragma once 来替代类似的功能。

3.UNICODE _UNICODE __T _T __TEXT _TEXT L TEXT宏
  http://www.cnblogs.com/ini_always/archive/2011/05/20/2050517.html

4.宏有时候可以作开关,需要时候打开,不需要时候关闭
  http://www.cnblogs.com/zxl2431/archive/2011/04/10/2011298.html
  http://zhidao.baidu.com/question/70159182.html

5.MFC给你生成的cpp文件里面都有这么几行:
  #ifdef _DEBUG
  #define new DEBUG_NEW
  #undef THIS_FILE
  static char THIS_FILE[] = __FILE__;
  #endif
  http://hi.baidu.com/zsb517/blog/item/418a5d88b511f8a40f2444c4.html

6.宏定义中 \表示换行,下一行连接上一行 ##表示字符串连接

7.#ifndef __AFXWIN_H__
    #error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
  #endif
  如果没有定义__AFXWIN_H__,编译时就报错“error   :include   'stdafx.h' before including this file for PCH”,也就是说,如果使用了

 预编译头文件,则通常最先包含'stdafx.h'  文件。

8.MFC常用宏的分类及其作用与用法
  http://web.tsmc.edu.cn/xxkx/it/2/jss_2_c_00009.html

9.DDX_***()
      TEXT:DDX_TEXT()可以把控件上的文本信息和类的成员变量关联起来,调用DoDataExchange(pDX)就完成了数据的Exchange可以通过UpdaeData()

  这个函数来实现数据的更新。
      Control:绑定控件与控制变量,以实现界面与内存数据双向的传输。从而实现调用UpdateData()函数后能够将数据在控件与控件对象之间进行 

 传递.
      如果你为控件分配了变量
  UpdateData(true):是使用户输入的数据能够反映到变量上,在函数调用之后变量才被赋值.把控件的值传给对应的变量.
  UpdateData(false) :是当你给控件对应的变量赋过值之后,在控件上体现出来,在函数调用之前,控件的值是不会随变量变化的.把变量的值传递

 给控件。
  UpdateData()相当于是UpdateData(true)
  http://topic.csdn.net/t/20041222/23/3668557.html

10.WINVER:头文件中会通过该宏来判定操作系统版本,某些接口不支持低版本系统,但有些函数实际上是支持低版本系统的(只是不推荐在低版本系统

   中使用),因此通过自己重新定义WINVER可以使得这些函数得到支持指定程序编译运行的最低windows系统的版本号,宏定义的值对应了相应的操作

  系统。可以根据具体情况修改该值(需要时候到网上查即可)。
   _WIN32_WINNT:用来让编译器知道你的操作系统是哪个版本的,因为有些API函数,早期的Windows版本不支持,当值大于等于0x0500表示是Windows

  2000或以上版本。
  _WIN32_WINDOWS:也是用来标注程序编译运行所需要的最低系统版本号,同_WIN32_WINNT一样,是由于只用WNVER参数标注不明是哪个版本的操作系 

  统而定义的。
  http://wxxweb.blog.163.com/blog/static/1351269002010210955129/
  _WIN32_IE:定义了程序编译运行所需要的最低IE版本号,有时候操作系统版本号定义太老的时候可能发生冲突,这时候可以到网上查找对应的版本

  号的值和需要的操作系统的版本号。
  http://hi.baidu.com/hust_junejun/blog/item/d86557a3cd49f8a6caefd0f9.html
  http://blog.sina.com.cn/s/blog_4dfc39d10100sz7n.html

11.#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0'   

processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
   定义了程序运行后,所显示皮肤的风格,可以到网上查找

12.#import
   http://chuiwenchiu.wordpress.com/2006/01/04/c-import-%E6%8C%87%E4%BB%A4/
   http://blog.sina.com.cn/s/blog_436fe8b10100mtvp.html

13.__FILE__ 显示文件名 __LINE__显示代码所在的行数 ASSERT断言宏


 

你可能感兴趣的:(C++,windows,Microsoft,File,mfc,编译器)