#pragma once#define STR_CLASS_NAME _T("CSignalLampCtrl")问题一:“_T”是什么意思???
// CSignalLampCtrlclass CSignalLampCtrl : public CWnd
{
DECLARE_DYNAMIC(CSignalLampCtrl)
问题二:“DECLARE_DYNAMIC”是一个“宏”,“宏”后面跟类名,这是一个什么意思呢???
enum StateType{Normal, Warning, Disable}; int nIDBitmap;
public:
CSignalLampCtrl();
virtual ~CSignalLampCtrl();
问题三:“~”表示什么???
void RegisterCtrlClass();
void SetState(StateType nState);protected:
virtual void PreSubclassWindow();public:
afx_msg void OnPaint();
问题四:“afx_msg”这是什么意思,怎么“宏”可以像“prive public protected”一样来声明方法???
DECLARE_MESSAGE_MAP()
问题五:“DECLARE_MESSAGE_MAP”这样声明一个“宏”的作用是什么???
};

解决方案 »

  1.   

    #ifdef UNICODE 
    #define _T(x) L##x;
    #else
    #define _T(x) x;
    #endif
    后面的看《深入浅出MFC》
      

  2.   

    1. _T是个宏
    2. DECLARE_DYNAMIC(CSignalLampCtrl), Go to definition看宏的定义
    3. ~表析构
    4. afx_msg是宏,实际上定义的是空,就是起一个标示的作用,你可以去掉afx_msg
    5. Declares that the class defines a message map. Each CCmdTarget-derived class in your program must provide a message map to handle messages. 
      

  3.   


    再看一个实例,然后快速开发出一个“ActiveX”控件,没有时间深入学习“MFC”了,不过小弟有C++基础的。
      

  4.   


    为什么呢?是不是MFC为了方便用户的使用,把一系列的类和方法定义为了“宏”???
      

  5.   


    //呵呵,不懂楼主看得懂这几行没有!我来说一下吧!
    这几行宏的定义涉及到Unicode编码和ASCII编码的问题,
    如果楼主看过Unicode编码和ASCII编码方面的文章,
    就会豁然开朗了。尤其是在Windows 编程中,_T()和TEXT()宏的使用,更是频繁,
    为什么要用宏呢?呵呵,这是为了方便程序的移植而做的!你的程序可以编绎成ASCII版的,也可以编绎成Unicode版的,
    如果你不想改代码从而实现上面的需求,用宏是最好的选择了!...在Windows下编程,建议楼主先好好理解一下ASCII和UNICODE,这样对编程大有好处!
      

  6.   

    _T是个宏,意思就是编译时,编译器通过你设置为Unicode或ASCII编码来选择编译方式。
      

  7.   

    感觉你主要还是基础知识不了解
    你可以看一下一些C++的书
    比如深入浅出MFC等
      

  8.   

    磨刀不误砍柴功
    C++基础对于理解MFC那一套机制不太够
      

  9.   

    感觉LZ应该开下MFC基础的书,书中都有说明的。