学习MFC遇到的有关问题

学习MFC遇到的问题
是《深入浅出MFC》上面的一个例子,但是有些地方没有看懂,下面划红线的地方
C/C++ code


class CWinApp : public CWinThread
{
        DECLARE_DYNAMIC(CWinApp)
public:
  CWinApp* m_pCurrentWinApp;
  CWnd* m_pMainWnd;

public:
  CWinApp::CWinApp()  {
                        m_pCurrentWinApp = this;
                      }
  CWinApp::~CWinApp() {
                      }

  virtual BOOL InitApplication() {
                                   return TRUE;
                                 }
  virtual BOOL InitInstance()    {
                                   return TRUE;
                                 }
  virtual int Run() {
                      return CWinThread::Run();
                    }
};

class CDocument : public CCmdTarget
{
        DECLARE_DYNAMIC(CDocument)[color=#FF0000]这个东西是什么用法呀?[/color]
public:
  CDocument::CDocument()   {
                           }
  CDocument::~CDocument()  {
                           }
};

求解释呀!

------解决方案--------------------
DECLARE_DYNAMIC(CDocument)这个东西是什么用法呀?
挺象是指定文档颜色,你可以这么试试:程序运行后,在视图里写上文字,看是什么颜色.如果有颜色,你再改颜色,比如:DECLARE_DYNAMIC(CDocument)[color=#00FF00]
------解决方案--------------------
直接搜索’DECLARE_DYNAMIC‘
------解决方案--------------------
IMPLEMENT_DYNAMIC是实现“运行时类型识别”宏,与之相对应的是DECLARE_DYNAMIC(声明“运行时类型识别”宏)。也就是说你在.CPP文件中如果看见有IMPLEMENT_DYNAMIC,则在.H文件中必定有DECLARE_DYNAMIC的声明。 
DECLARE_DYNAMIC/DEClARE_DYNAMIC是为了确定运行时对象属于哪一个类而定义的宏。 
DEClARE_DYNCREATE/IMPLEMENT_DYNCREATE是为了“动态创建"类的实例而定义的宏。new可以用来创建对象,但不是动态的。比如说,你要在程序中实现根据拥护输入的类名来创建类的实例,下面的做法是通不过的: 
char szClassName[0x100]; 
cin >> szClassName; 
CObject* pOb=new szClassName; //通不过 
这里就要用到DEClARE_DYNCREATE/IMPLEMENT_DYNCREATE定义的功能了。