⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap3_4.htm

📁 vc教程,真正的程序员用Visual C++。如果你想当程序员
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>

<head>
<title>3.4 应用程序执行机制</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>

<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<font SIZE="5"><b><div align="center"><center>

<table border="0" width="85%" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
  <tr>
    </b><td><div align="center"><center><table border="0" width="615" cellpadding="0"
    cellspacing="0" height="20">
      <tr>
        <td width="377" bgcolor="#15397D" height="20"></td>
        <td width="238" bgcolor="#000000" height="20"><p align="right"></font><a
        href="../../vc.htm"><span style="text-decoration: none"><font color="#FFFFFF">电脑报Visual 
        C++网络教程</font></span></a></td>
      </tr>
    </table>
    </center></div><font FACE="Times New Roman" SIZE="4"><b><p ALIGN="CENTER"></b></font><font
    color="#3973DE" FACE="Times New Roman" SIZE="4">3.4 </font><font SIZE="4" color="#3973DE">应用程序执行机制</font><font
    FACE="Times New Roman" SIZE="3"></p>
    <b><p ALIGN="JUSTIFY"></b></font><span style="font-size: 9pt"><font color="#3973DE">3.4.1 
    WinMain函数</font></span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。但是,如果浏览Hello程序的所有的方法和全局函数,是找不到WinMain函数的。MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序的框架中,编译时会自动将该函数链接到可执行文件中。程序员可以重写WinMain函数,但一般不需要这么做。<br>
      下面的程序清单3-1给出了WinMain函数的代码。其中,_tWinMain函数在\DevStudio\Vc\Mfc\src\AppModul.cpp中定义,它所调用的AfxWinMain函数在同一目录下的WinMain.cpp中定义。名字是_tWinMain函数而不是WinMain,是考虑到对不同字符集的支持,在tchar.h中有_tWinMain的宏定义。在ANSI字符集下编译时,_tWinMain就变成WinMain,在Unicode下编译时,_tWinMain就变成wWinMain。</span></p>
    <b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">提示</b>:Unicode是具有固定宽度、统一的文本和字符的编码标准。由于Unicode采用的是16位编码,因此可以包含世界各地的书写系统的字符和技术符号(如中文也在Unicode之中),从而克服了ASCII码在表示多语言文本上的不足之处,扩大了ASCII码7位编码方案的好处。Unicode同等地对待所有的字符,并且在表示各种语言的任何字符时既不需要换码序列(escape)也不需要控制代码。Win32和Visual 
    C++很好的支持Unicode字符集。</span></p>
    <b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">清单3-1 _tWinMain函数定义</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// export WinMain to force linkage to this 
    module</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">extern int AFXAPI AfxWinMain(HINSTANCE 
    hInstance, HINSTANCE hPrevInstance,</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LPTSTR lpCmdLine, int nCmdShow);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#ifdef _MAC</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">extern &quot;C&quot; int PASCAL</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#else</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">extern &quot;C&quot; int WINAPI</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#endif</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">_tWinMain(HINSTANCE hInstance, HINSTANCE 
    hPrevInstance,</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LPTSTR lpCmdLine, int nCmdShow)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// call shared/exported WinMain</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">return AfxWinMain(hInstance, 
    hPrevInstance, lpCmdLine, nCmdShow);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">AfxWinMain函数定义:</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">/////////////////////////////////////////////////////////////////////////////</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// Standard WinMain implementation</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// Can be replaced as long as 'AfxWinInit' 
    is called first</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int AFXAPI AfxWinMain (HINSTANCE 
    hInstance, HINSTANCE hPrevInstance,</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LPTSTR lpCmdLine, int nCmdShow)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">ASSERT(hPrevInstance == NULL);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int nReturnCode = -1;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CWinApp* pApp = AfxGetApp();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// AFX internal initialization</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if (!AfxWinInit(hInstance, hPrevInstance, 
    lpCmdLine, nCmdShow))</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">goto InitFailure;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// App global initializations (rare)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">ASSERT_VALID(pApp);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if (!pApp-&gt;InitApplication())</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">goto InitFailure;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">ASSERT_VALID(pApp);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// Perform specific initializations</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if (!pApp-&gt;InitInstance())</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if (pApp-&gt;m_pMainWnd != NULL)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TRACE0(&quot;Warning: Destroying non-NULL 
    m_pMainWnd\n&quot;);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">pApp-&gt;m_pMainWnd-&gt;DestroyWindow();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">nReturnCode = pApp-&gt;ExitInstance();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">goto InitFailure;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">ASSERT_VALID(pApp);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">nReturnCode = pApp-&gt;Run();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">ASSERT_VALID(pApp);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">InitFailure:</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#ifdef _DEBUG</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// Check for missing AfxLockTempMap calls</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if 
    (AfxGetModuleThreadState()-&gt;m_nTempMapLock != 0)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TRACE1(&quot;Warning: Temp map lock count 
    non-zero (%ld).\n&quot;,</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">AfxGetModuleThreadState()-&gt;m_nTempMapLock);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">AfxLockTempMaps();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">AfxUnlockTempMaps(-1);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#endif</span></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -