关于孙鑫VC++深入讲解的几个迫切解决的问题
疯癫小程序 2010-03-01 12:50:32 问题一:
p77 里#define afxCurrentWinApp AfxGetModuleState()->m_pCurrentWinApp
原文:我们返回去看看前面例3-5所示的CWinApp构造函数代码,就可以知道AfxGetApp函数返回的是在CWinApp构造函数里保存的this指针。对Test程序来说,这个this指针实际上指向的是CTestApp的对象:theApp。也就是说,对Test程序来说:pThread和pApp所指向的都是CTestApp的对象,即theApp全局对象。
疑惑点:这里m_pCurrentWinApp只是类里的一个成员变量,前面CWinApp构造函数里pModuleState->m_pCurrentWinApp=this处m_pCurrentWinApp和#define afxCurrentWinApp AfxGetModuleState()->m_pCurrentWinApp里的m_pCurrentWinApp是一个吗?我怎么一点也看不出他们是同一个.
问题二:
p79 里wndcls.lpszClassName=_afxWnd;
原文:AfxEndDeferRegisterClass函数首先判断窗口类的类型,然后赋予相应的类名(wndcls.lpszClassName变量),这些类都是MFC预定义的.
疑惑点:我跟踪了_afxWnd(gotoDefinition)终止弹出对话框找不到,那在MFC里哪里有它的预定义呢?
问题三:
p83 里if(!PreCreateWindow(cs))
原文:再回到例3-14所示CWnd类的CreateEx函数实现代码中,可以发现该函数中又调用了PreCreateWindow函数,后者是一个虚函数。因此这里实际上调用的是子类,即CMainFrame类的PreCreateWindow函数.
疑惑点:我查了下再如下继承关系中CWin-->CFrameWin-->CMainFrame中,这三个类均有PreCreateWindow函数,而且都为虚函数,那么再例3-14中CWin::CreateEx函数中的PreCreateWindow(cs)调用的会是CMainFrame的PreCreateWindow而不是CWin的我就真的不能理解了.
PS:对以上三个问题,各位网友可以条您自己会的回答,我对每个会分别给分,麻烦大家了