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

📄 untitled-16.txt

📁 mfc 教程
💻 TXT
字号:
    其他有趣的CWinAPP可覆盖函数包括onldle、Run以及PreTranslateMessage。用pnldle
可以方便地执行如垃圾回收这样的后台处理事务。因为是在应用程序“空闲”时才调用
onldle,也就是在没有消息等候处理时才调用它,这样就为处理低优先级的后台任务提供了
一种优秀的机制,它不会大量产生个别的执行线程。在第14章中将详细讨论onldle。您可
以覆盖Run来自定义消息循环,用自己的消息循环代替它。如果想要在消息被调度以前执
行一些专门的预处理,则可以覆盖PreTranslateMessage,而不必自己编写整个新的消息循环。
1.3.2 MFC如何使用应用程序对象
    对于从未见过MFC应用程序源代码的人而言,Hello程序显著的特点就是它没有包含
自己定义的类以外的任何可执行代码。例如,它没有main或WinMain函数;在整个程序中
唯一的语句就是具有全局有效性的用来实例化应用程序对象的语句。那么到底是什么启动
了程序的运行,应用程序对象又是何时起作用的呢?
    揭开这个谜的最好方法就是看看主框架的源代码。一个MFC提供的源代码文件(Win-
main.cPP)中包含一个AftwinMain函数,它在MFC中的作用相当于WinMain。(实际上,当您
购买了  VisualC++,同时也就得到了  MFC提供的源代码。) AfXWinMain广泛使用应用程序对
象,这就是为什么应用程序对象必须作全局声明的原因。全局变量和对象在任何其他代码
执行以前被创建,在AfxwinMain运行以前,应用程序对象必须在内存中存在。
    运行一开始,AANinMain就调用Afxwinlnit函数来初始化主框架,并将hln。tance、nCmd-
show以及其他AfxwinMain函数参数复制给应用程序对象的数据成员,然后它调用InitAppli
canon和Initlnstance。在MFC的16位版本中,只有传递给AfxwinMain的hPrevInstance参数是
空时,才调用InitApplication,这表明当前运行的是应用程序的唯一实例。在Win32环境下,
hPrevlnstance总是空的,因此主框架不必再去检查。32位应用程序能够像使用Initlnstance一
样方便地使用InitApplication初始化自身,但是InitApplication是为保证MFC先前版本的兼容
性而提供的,因此不应该在32位Windows应用程序中使用。如果Afxwinlnit、InitApplication
或者Initlnstance返回0值,则AfxwinMain终止而不是继续进行,应用程序被关闭。
    只有在上述所有函数返回非零的值时,AfxwnMain才执行以下关键的步骤。语句
      PThread-> Run();
调用应用程序对象的Run函数,该函数执行消息循环并开始向应用程序窗口发送消息。消
息循环重复执行,直到WM.QUIT消息从消息队列中被检索到。这时Run跳出循环,并调用
Exitlnstance,返回到AMiinMain中。在执行了最后的一些清除工作之后,AWinMain执行一
个return语句结束应用程序。
1.3.3框架窗口对象
    MFC的CWnd类及其派生类为窗口或应用程序创建的窗口提供了面向对象的接口。

⌨️ 快捷键说明

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