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;
}
{
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
- CWinApp的构造函数(摸索)
- CWinApp类构造函数定义的解释
- 为什么CWinApp构造函数中的this是指向派生类的
- 有没有virtual的构造函数? 子类如何调用父类的构造函数? 用CWinApp派生类如何构造程序对象?
- CWinApp中提供的虚函数
- CWinApp类虚函数表
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- 关于函数指针类型强制转换的一些摸索
- 关于CWinApp::OnIdle的解释
- CWinApp的应用与理解
- 函数指针
- WebServer
- 冒泡排序与选择排序
- 垂直翻页的Viewpager 兼容华为手机
- webrtc简单介绍以及用法(native)
- CWinApp的构造函数(摸索)
- 进程通信之共享内存
- 交叉编译
- StringBuilder和StringBuffer的区别
- Gson框架小结
- hibernate.cfg.xml或JPA persistence.xml中must end with the ';' delimiter问题
- ”您的应用签名算法采用“SHA256withRSA”,在部分4.2一下安卓版本的手机上不能安装的解决方案
- adb shell 中直接激活界面命令
- Git工作的一般流程