1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
vc2MFC概述

第2章  MFC概述 2.1 MFC简介 类库是一个可以在应用程序中使用的相互关联的类的集合。 MFC库(Microsoft基本类库)是一个Windows应用程序框架,它把传统的Windows编程规范中的大多数内容封装成为各种类,它定义了应用程序的结构,并实现了标准的用户接口,提高了编程效率。 Msdn中查看MFC类结构 MFC分类 CObject_derived 类 Non_CObject_derived 类 非CObject派生类 2.2 剖析单文档程序流程 (1)WinMain函数 ——入口 在APPMODUL.cpp中,在vc开发环境中打开,在_tWinMain函数处设置断点,调试运行。该函数的参数和基于Windows API中的WinMain函数一样,但是其名字不同。可以在_tWinMain函数处,go to defination,发现是宏 #define _tWinMain WinMain。 (2)WinMain与其他类如何关联 CTestApp CWinApp派生,表示应用程序类。在构造函数中设置断点。在源文件中找到CTestApp theApp,并设置断点。 ?先执行CTestApp theApp,然后WinMain? 通过控制台应用程序模拟: thaApp代表应用本身。 在Windows API程序中,是通过实例号来代表应用程序。 CTestApp在构造时,首先会构造父类CWinApp,两者进行关联。 CWinApp的构造函数 AppCore.cpp中。 其含有参数,子类构造是,需显示调用,而这里没有显示传递。如果其有缺省值,就不用了。查看其定义,goto defination,发现有确实值。 pThreadState-m_pCurrentWinThread=this; this代表theApp。 theApp-WinMain WinMain函数中,调用AfxWinMain函数,其在WinMain.cpp文件中。 CWinApp * pApp=AfxGetApp(); //得到当前应用实例的指针 在AfxWinMain函数中,完成应用程序设计、注册、创建、显示及更新、消息循环、窗口处理函数。 pThread也指向当前应用,其调用InitInstance,因其是虚函数,所以实际调用的是CTestApp的InitInstance函数。 theApp-WinMain-AfxWinMain(InitInstance)-CTestApp的InitInstance 设计注册窗口:MFC提前预定义了几种窗口类,不用设计了。 有AfxEndDeferRegisterClass(在WinCore.cpp中)注册。 其中AfxRegisterClass函数中最终还是调用RegisterClass函数。 创建窗口 CMainFrame和CView从CWnd派生,都代表窗口,框架窗口在后。 在CMainFrame中有PreCreateWindow,其中调用CFrameWnd::PreCreateWindow(cs)----在WINFRM.cpp中。 其中,验证是否注册过该类型窗口。然后,赋类名。 正常情况下,是在PreCreateWindow中进行注册。 CreateWindow函数在WINCore.cpp中。 CFrameWnd中LoadFrame函数-Create函数- CreateEx函数 CreateEx中又调用了PreCreateWindow,好处在于在创建窗口之前有机会修改窗口样式。 注:cs结构和CreateWindowsEx参数是一致的。 显示及更新 ProcessShell()创建窗口完成。 m_pMainWnd为指向主框架的指针,ShowWindow(SW_SHOW) UpdateWindow(); 消息循环 CWinThread::Run ThreadCore.cpp中 其中PumpMessage 当WM_QUIT消息时退出 PumpMessage函数实现中有GetMessage 窗口过程函数是DefWindowProc,在vc中采用的是消息映射的方式,后续阐述。 整个过程 CTestApp theApp; CWinApp构造函数 其中保存了指向theApp的指针 CTestApp构造函数 WinMain函数 CTestAppInitInstance pThread-InitInstance 在这个函数中进行了窗口类的设计、注册、创建、显示及更新。 PumpMessage 消息循环 ThreadCore.cpp中 CTestDoc 其父类,CDocument 文档代表数据,存储、加载等

文档评论(0)

yy558933 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档