CWinApp的构造函数(摸索)

来源:互联网 发布:韩磊花房姑娘知乎 编辑:程序博客网 时间:2024/05/29 04:35
CWinApp::CWinApp(LPCTSTR lpszAppName)
{
if (lpszAppName != NULL)
/*开辟新空间,复制字符串*/
m_pszAppName = _tcsdup(lpszAppName);  
else


m_pszAppName = NULL;


// initialize CWinThread state
// AFX_MOUDLE_STATE 当前程序模块状态信息
// 获取全局变量 的地址,其中_AFX_CMDTARGET_GETSTATE是 AfxGetMoudleState()
AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE(); 


ENSURE(pModuleState);
// AFX_MODULE_THREAD_STATE 当前程序线程状态信息,以下是从当前程序模块中获得当前程序线程状态
AFX_MODULE_THREAD_STATE* pThreadState = pModuleState->m_thread;
ENSURE(pThreadState);
/*AfxGetThread 获得是theApp的地址*/
ASSERT(AfxGetThread() == NULL);
// 将当前线程设置为 theApp
pThreadState->m_pCurrentWinThread = this;
//ASSERT(表达式) 表达式为真,继续执行,表达式为假中断了
ASSERT(AfxGetThread() == this);
// 给CWinApp 的成员m_hthread赋值, 即保存线程句柄
m_hThread = ::GetCurrentThread();
// 给CWinApp的成员GetCurrentThreadId 赋值,其意义为保存当前线程的的ID
m_nThreadID = ::GetCurrentThreadId();


// initialize CWinApp state
ASSERT(afxCurrentWinApp == NULL); // only one CWinApp object please
// 将theApp的地址存到程序模块中
pModuleState->m_pCurrentWinApp = this;
/*AfxGetApp, 返回的是TheApp的地址*/
ASSERT(AfxGetApp() == this);


// in non-running state until WinMain
/*应用程序实例句柄*/
m_hInstance = NULL;
m_hLangResourceDLL = NULL;
m_pszHelpFilePath = NULL;
m_pszProfileName = NULL;
/*注册键. */
m_pszRegistryKey = NULL;
m_pszExeName = NULL;
m_pszAppID = NULL;
m_pRecentFileList = NULL;
m_pDocManager = NULL;
m_atomApp = m_atomSystemTopic = NULL;
m_lpCmdLine = NULL;
m_pCmdInfo = NULL;
m_pDataRecoveryHandler = NULL;


// initialize wait cursor state
m_nWaitCursorCount = 0;
m_hcurWaitCursorRestore = NULL;


// initialize current printer state
m_hDevMode = NULL;
m_hDevNames = NULL;
m_nNumPreviewPages = 0;     // not specified (defaults to 1)


// initialize DAO state
m_lpfnDaoTerm = NULL;   // will be set if AfxDaoInit called


// other initialization
m_bHelpMode = FALSE;
m_eHelpType = afxWinHelp;
m_nSafetyPoolSize = 512;        // default size


m_dwRestartManagerSupportFlags = 0;    // don't support Restart Manager by default
m_nAutosaveInterval = 5 * 60 * 1000;   // default autosave interval is 5 minutes (only has effect if autosave flag is set)


m_bTaskbarInteractionEnabled = TRUE;


// Detect the kind of OS:
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);


// Fix for warnings when building against WinBlue build 9444.0.130614-1739
// warning C4996: 'GetVersionExW': was declared deprecated
// externalapis\windows\winblue\sdk\inc\sysinfoapi.h(442)
// Deprecated. Use VerifyVersionInfo* or IsWindows* macros from VersionHelpers.
#pragma warning( disable : 4996 )
::GetVersionEx(&osvi);
#pragma warning( default : 4996 )


m_bIsWindows7 = (osvi.dwMajorVersion == 6) && (osvi.dwMinorVersion >= 1) || (osvi.dwMajorVersion > 6);


// Taskbar initialization:
m_bComInitialized = FALSE;


m_pTaskbarList = NULL;
m_pTaskbarList3 = NULL;
m_bTaskBarInterfacesAvailable = TRUE;
}
0 0
原创粉丝点击