读书人

学习MFC遇到的有关问题

发布时间: 2012-04-27 11:57:44 作者: rapoo

学习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定义的功能了。

读书人网 >VC/MFC

热点推荐