在学习MFC的过程中跟踪程序运行,发现在
......\VC98\MFC\SRC\WINFRM.CPP中
BOOL CFrameWnd::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle,
CWnd* pParentWnd, CCreateContext* pContext)
{
......
VERIFY(AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG));
......
}AfxDeferRegisterClass的调用直接指向了
......\VC98\MFC|SRC\WINCORE.CPP中
BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister){......}因为没有找到这两个函数的资料,所以有如下几个问题请教:1. 为什么前者的调用会指向后者,如果是函数的重载或者函数指针,那么它的定义在什么地方呢?
2. 这样做的意义是什么?
3. AfxEndDeferRegisterClass是完成窗口类的注册,那么AfxDeferRegisterClass主要完成什么功能呢?

解决方案 »

  1.   

    第一问和第三问已经解决,在
    ......\VC98\MFC\SRC\AFXIMPL.H文件中有定义:#define AfxDeferRegisterClass(fClass) AfxEndDeferRegisterClass(fClass)BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister);这两个函数实际上就是一个,都是完成窗口类的注册。那么微软为什么要这么做呢??真让人费解......请教高手释疑:
      

  2.   

    应该是历史原因吧
    以前的
    #define AfxDeferRegisterClass(fClass) \ ((afxRegisteredClasses & fClass) ? TRUE:AfxEndDeferRegisterClass(fClass) 
    现在放到AfxEndDeferRegisterClass的实现里面了