




已阅读5页,还剩172页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图1-1Windows应用程序的图形窗口界面,(a)基于窗口的应用程序,(b)基于窗体(对话框)的应用程序,图1-2Windows应用程序的基本结构,主函数创建窗口;while()接收用户事件;将事件信息发送给系统;,事件处理函数switch()case1:事件1处理代码;case2:事件2处理代码;返回;,Windows系统,事件源,事件源,初始化及创建窗口,有事件消息?,N,向系统发送事件消息,根据消息类型处理消息,系统,程序结束消息?,开始,结束,主函数,事件消息处理函数,图1-3Windows程序主函数、事件消息处理函数与系统之间的关系,图1-4带有窗口的MSDOS界面,微机硬件系统,DOS,Windows平台入口名:main,Windows应用程序入口名:WinMain,DOS应用程序入口名:main,微机硬件系统,Windows操作系统,Windows应用程序入口:WinMain,ConsoleApplication(控制台程序)入口名:main,MSDOS,(a)早期的Windows,(b)后来的Windows,图1-5Windows与DOS的关系,微机硬件系统,Windows操作系统,Windows应用程序,Java应用程序,(a)Java与Windows的关系,(b).NET与Windows的关系,图1-6Java、.NET与Windows的关系,Java虚拟机,微机硬件系统,Windows操作系统,Windows应用程序,C#等应用程序,.NET平台,指针,指针,指针,对象,对象,对象,图1-7句柄的两种可能的实现方式示意图,对象,对象,指针,指针,指针型句柄,A0,A1,索引型句柄,voidmain(),指向程序堆栈的指针,程序控制块,程序代码,程序堆栈,前一个程序控制块的指针,下一个程序控制块的指针,图1-8程序控制块的一种结构,id,程序内存控制块,虚存空间结构,物理空间结构,mm,断点(PC),程序上下文,控制块,程序代码,简化画法,指针1,指针2,指针3,进程控制块1,进程控制块2,进程控制块3,图1-9HINSTANCE类型句柄的概念,程序1代码,程序2代码,共有3个进程(程序)实例,HINSTANCE类型句柄,进程控制块链表,style,lpfnWndProc,lpszClassName,窗口函数1,图1-10窗口类WNDCLASS实例与代码的关系,窗口类实例1,hInstance,进程控制块,程序代码,HINSTANCE,style,lpfnWndProc,lpszClassName,窗口函数n,窗口类实例n,hInstance,style,lpfnWndProc,lpszClassName,图1-11窗口类实例注册表,style,lpfnWndProc,lpszClassName,窗口类实例1,窗口类实例n,typedefstruct_WNDCLASSUINTstyle;WNDPROClpfnWndProc;intcbClsExtra;intcbWndExtra;HANDLEhInstance;HICONhIcon;HCURSORhCursor;HBRUSHhbrBackground;LPCTSTRlpszMenuName;LPCTSTRlpszClassName;,窗口函数,WinMain函数,HINSTANCE实例,窗口类注册表,注册RegisterClass(wc),CreateWindow(LPCTSTRlpClassName,LPCTSTRlpWindowName,DWORDdwStyle,intx,inty,intnWidth,intnHeight,HWNDhWndParent,HMENUhMenu,HANDLEhInstance,LPVOIDlpParam);,创建,HWND,图1-12窗口的定义及创建,创建过程就是部件安装过程,系统消息队列,事件转换为消息,Windows系统,应用程序用于处理消息的窗口函数,图1-13事件、消息、消息循环及消息的传递处理过程,鼠标、键盘等事件,应用程序的消息循环,while(GetMessage()TranslateMessage(,非队列消息,进程消息队列,窗口消息,图1-14Windows系统收到执行一个Windows应用程序命令之后的行为,将程序文件加载到内存,为程序分配控制块形成HINSTANCE实例,将HINSTANCE实例加入HINSTANCE实例链表,以本程序实例与前一个程序实例为参数调用WinMain(),创建并显示程序窗口,自消息队列获取消息,将消息派送到系统并由系统调用窗口函数处理消息,调用系统默认处理函数,终止消息,程序终止,有用户消息处理代码,无用户消息处理代码,消息处理,图1-15例1-2程序运行结果,消息标识,消息处理函数指针,图1-16消息映射表,消息标识,消息处理函数指针,图1-17最简单的观察者模式,for(),消息处理函数,消息处理函数,消息处理函数,被观察者,观察者,intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow),WinMain()代码,前一个控制块指针,后一个控制块指针,WinMain()代码,前一个控制块指针,后一个控制块指针,系统中各个程序的HINSTANCE实例链表,图1-13系统在调用WinMain()时传递的两个HINSTANCE实例,当前程序代码,把事件变换为消息,WinMain()while(GetMessage(),WndProc()switch()case:case:,Windows系统,图1-14Windows系统、Windows应用程序与窗口函数三者之间的关系,负责程序的安装及消息接收和派送,负责消息的处理,图2-1例2-1应用程序运行结果,图2-2例2-2应用程序运行结果,LRESULTCALLBACKWndProc()调用AfxWndProc();,AfxWndProc();原窗口函数代码,intAPIENTRYWinMain()returnResultCode=pApp-Run();,Windows系统,封装窗口函数的类,主函数,原窗口函数,图2-3AfxWndProc()函数与原窗口函数的关系,消息,消息,消息,消息,消息,事件,图2-4例2-4应用程序运行结果,AFX_MSGMAP_ENTRY_messageEntries,图2-5类的消息映射表,_messageEntries2,_messageEntries1,_messageEntries0,A:_messageEntries,B:_messageEntries,图2-6类族消息映射表的结构,_messageEntries,_messageEntries,_messageEntries,ClassA,ClassB,ClassC,图2-7类B接受消息后调用消息处理函数的过程,pBaseMap,lpEntries,消息及pfn,消息及pfn,消息及pfn,消息处理函数1,消息处理函数2,消息处理函数n,类A,pBaseMap,lpEntries,消息及pfn,消息及pfn,消息及pfn,消息处理函数1,消息处理函数2,消息处理函数n,类B,图2-8例2-5应用程序的运行结果,CFrameWnd,CWnd,CCmdTarget,CObject,图3-2窗口类在类族中的位置,CWinApp,CWinThread,CCmdTarget,CObject,图3-3应用程序类在类族中的位置,图3-4创建工作空间,图3-5向工程加入源文件,图3-6设置工程选项,图3-7框架窗口类、视图类、文档类、文档模板、应用程序类之间的关系,目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构。这种程序框架与简单程序框架之间的重要区别就在于形成应用程序的主窗口不只需要一个类的对象,而是需要三个类的对象:框架窗口类CFrameWnd对象、视图类CView对象和文档类CDocument对象。框架窗口类CFrameWnd对象作为窗口的框架,视图类CView的对象作为帖附在框架窗口上的用户区,它们两者共同形成了应用程序的界面,而文档类CDocument对象则在幕对数据进行存储和管理。,上面三个类对象之间的关系类似于房屋的窗户,窗口框架类CFrameWnd相当于窗框,视图类CView相当于窗框上的玻璃,而文档类CDocument就相当于室内的物品。在房屋的外面,透过玻璃可以窥见室内的部分物品。作为房屋,它可以有多个窗户可以从不,文档(数据),视图,框架窗口,应用程序,文档模板,图3-8Windows的NotePad记事本程序界面,图3-9多文档应用程序界面,图3-10文档模板的类继承关系,应用程序对象,文档模板,文档对象,框架窗口对象,视图对象,图3-11应用程序创建各对象的顺序,系统,应用程序对象,图3-12应用程序与文档模板对象对象链表,文档对象,框架窗口,活动视图,图3-13文档模板、文档对象、框架窗口对象、视图之间关系示意图,视图指针链表,视图链表,应用程序对象,窗口框架(CMainFrame)对象,GetActiveDocument(),GetActiveView(),文档对象,视图对象,GetDocument(),UpdateAllView(),GetParent(),GetParentFrame(),GetFirstVewPositio(),GetNextView(),AfxGetApp(),AfxGetMainWnd(),图3-14SDI应用程序框架各对象之间的联系方法,应用程序对象,窗口框架(CMainFrame)对象,子窗口框架(CChildFrame)对象,MDIGetActive(),GetActiveFrame(),GetActiveDocument(),GetActiveView(),文档对象,视图对象,GetDocument(),UpdateAllView(),GetParent(),GetParentFrame(),GetFirstVewPositio(),GetNextView(),AfxGetApp(),AfxGetMainWnd(),图3-15MDI应用程序框架各对象之间的联系方法,图3-16例3-2应用程序运行结果,活动的视图对象,文档模板对象,框架窗口对象,文档对象,应用程序对象,:DefWindowProc(),图3-17文档/视图程序消息流动顺序,图3-18在新建文档时程序会询问所建文档的类型,图3-19在试图打开一个文件时程序也会提出相应的询问,CMyDoc,m_pfnCreateObject,CreateObject(),CMyWnd,m_pfnCreateObject,CreateObject(),CMyView,m_pfnCreateObject,CreateObject(),类名,指针,类名,指针,类名,指针,图3-20类名与对象创建函数关联(映射)表,图3-21类中的类名与类对象构建函数映射表,CMyDoc,CMyWnd,CMyView,图3-22例3-5运行结果,a)正确创建了对象时的结果,b)未正确创建对象时的结果,“类名1”,指向下一个链表项的指针,类的信息,“类名2”,指向下一个链表项的指针,类的信息,“类名3”,指向下一个链表项的指针,类的信息,“类名n”,指向下一个链表项的指针,类的信息,NULL,图3-23类信息链表的结构,物理图形显示设备,设备驱动程序,图形设备描述环境,应用程序,图4-1图形设备描述表的基本概念,CPaintDC,CWindowDC,CDC,CObject,图4-2MFC设备描述环境类层次结构,CClientDC,CMetaFileDC,图4-3例4-1程序运行结果,CPen,CGdiObject,CObject,图4-4画笔在MFC类层次结构的位置,图4-5例4-2程序的运行结果,图4-6例4-3程序的运行结果,CBrush,CGdiObject,CObject,图4-7画刷在MFC类层次结构的位置,图4-8例4-4程序的运行结果,图4-9例4-5程序的运行结果,图4-10例4-6程序的运行结果,图4-11例4-7的程序运行结果,图4-12例4-8程序运行的结果,图4-13例4-9程序的运行结果,图4-14例4-10程序运行结果,(l,t),(r,b),图5-1矩形的坐标,(left,top),(right,bottom),图5-2尺寸,cx,cy,initCX,initCY,图5-3例5-1程序运行并响应鼠标左键单击后的结果,CArray,CMap,CObject,图5-4群体类在MFC类继承层次中的位置,CList,图5-5例5-2程序运行结果,图6-1基本MDI程序界面,图6-2可以在框架窗口中打开多个子窗口,SDI窗口程序,MDI窗口程序,基于对话框的程序,图6-3MFCAppWizard-Step1的选项,上下文帮助,普通窗口,浏览器外观窗口,3D(立体)外观,菜单中有打印预览选项,工具条,状态条,图6-4MFCAppWizard-Step4的选项,可拆分的窗口,带最小化按钮,带最大化按钮,使用系统菜单,粗边框,最大化窗口,最小化窗口,图6-5AdvancedOptions中的选项,图6-6框架窗口类的成员函数PreCreateWindow(),图6-7例6-1程序运行结果,图6-8例6-1修改后的程序运行结果,(a),(b),图6-9可拆分窗口的界面,选中该项后,向导即可生成可拆分窗口的程序界面,图6-10在向导的选项中选择可拆分窗口的界面,图6-11可同步更新的可拆分窗口,图6-12无效显示区域的概念,需要新绘制的圆形,该矩形区为无效显示区,UpdateAllViews(CView*pSender,LPARAMlHint=0L,CObject*pHint=NULL);,OnUpdate(CView*pSender,LPARAMlHint,CObject*pHint);,InvalidateRect(LPCRECTlpRect,BOOLbErase=TRUE);,含有无效区信息的对象,图6-13无效显示区域信息的传递,图6-14在MFCWizard-Step6中选择视图类的基类,虚函数OnInitialUpdate,设置滚动条参数的函数,图6-15虚函数OnInitialUpdate(),sizeTotal.cx,sizeTotal.cy,鼠标单击此处向右滚动sizePage.cx,鼠标单击此处向右滚动sizePage.cx,鼠标单击此处向右滚动sizeLine.cx,鼠标单击此处向左滚动sizeLine.cx,鼠标单击此处向上滚动sizeLine.cy,鼠标单击此处向下滚动sizePage.cy,鼠标单击此处向上滚动sizePage.cy,鼠标单击此处向下滚动sizeLine.cy,Document,View,图6-16函数SetScrollSizes()参数的含义,使用水平滚动条可以看到这几个贴近边框画的圆,图6-17例6-4程序的运行结果,画图时鼠标单击的实际位置,+,画出的圆的实际位置,图6-18视图的坐标原点仍是文档的原点,2,2,1,1,+,画图时鼠标单击的实际位置,画出的圆的实际位置,2,1,图6-17视图的坐标原点仍是文档的原点,用户区,图7-1用户区,图7-2选择添加消息处理函数,图7-3选择鼠标消息,选择该项,鼠标光标,图7-5例7-3程序运行结果,鼠标光标位置,图7-6例7-4程序运行结果,图7-7例7-5程序运行结果,图7-8例7-7程序运行结果,对话框编辑器,图片编辑器,字体编辑器,对话框,位图,字体,图标,光标,资源描述文件.rc,资源编译器,资源.res,头文件.h,程序源文件.cpp,C+编译器,目标文件.obj,连接器,可执行文件.exe,图8-1资源文件与程序文件的关系,资源头文件.h,库文件.lib,图8-2一个两级菜单的文本文件,菜单的名称及其标识ID,子菜单标题,子菜单标题,子菜单标题,菜单,子菜单3,子菜单2,子菜单1,菜单命令选项,图8-3菜单脚本与实际菜单的对照,图8-4以文本方式打开资源文件,IDR_MAINFRAMEMENUPRELOADDISCARDABLEBEGINPOPUP文件(&F)BEGINMENUITEM新建(&N)tCtrl+N,ID_FILE_NEWMENUITEM打开(&O).tCtrl+O,ID_FILE_OPENMENUITEM保存(&S)tCtrl+S,ID_FILE_SAVEMENUITEM另存为(&A).,ID_FILE_SAVE_ASMENUITEMSEPARATORMENUITEM最近文件,ID_FILE_MRU_FILE1,GRAYEDMENUITEM打印字符(&P)tCtrl+P,ID_FILE_PRTMENUITEMSEPARATORMENUITEM退出(&X),ID_APP_EXITENDPOPUP编辑(&E)BEGINMENUITEM撤消(&U)tCtrl+Z,ID_EDIT_UNDOMENUITEMSEPARATORMENUITEM剪切(&T)tCtrl+X,ID_EDIT_CUTMENUITEM复制(&C)tCtrl+C,ID_EDIT_COPYMENUITEM粘贴(&P)tCtrl+V,ID_EDIT_PASTEENDPOPUP帮助(&H)BEGINMENUITEM关于www(&A).,ID_APP_ABOUTENDEND,图8-5添加菜单命令选项,添加的菜单命令选项,图8-6例8-1程序运行结果,图8-7菜单编辑器,双击此处可打开菜单编辑器,图形化的菜单编辑器,图8-8使用菜单编辑器编辑菜单项,图8-9例8-3应用程序运行结果,双击此处可以打开快捷键编辑器,双击此处可以打开该快捷键的属性编辑器,快捷键属性编辑器,图8-10使用快捷键编辑器编辑快捷键表,双击此处可以打开图标编辑器,选择图标的规格,绘制图标的工具箱,图8-11图标编辑器,图8-12添加文件到工程,图8-13BitBlt函数中各参数的意义,图8-14例8-4程序运行结果,图9-1例9-1程序运行后会在当前目录中创建一个文件,图9-2例9-2程序运行后会在当前目录中创建一个文件,图9-3例9-3程序运行后单击鼠标左键会得到位图文件信息,CArchive类对象,磁盘,CFile对象,缓冲区,插入数据(写),提取数据(读),图9-4CArchive类对象与CFile类对象之间的关系,图9-5例9-4程序运行后结果,图9-6一个带有内嵌对象的复杂对象的示意图,对象A,对象B,对象C,对象D,对象E,图9-7对象序列化示意图,文件,调用B的读写函数,读出,写入,写顺序,读顺序,调用D的读写函数,调用C的读写函数,调用E的读写函数,对象A,对象B,对象C,对象D,对象E,调用C的读写函数,调用E的读写函数,调用B的读写函数,调用D的读写函数,图9-8CObject类的虚函数成员,A.Serialize(CArchive,B.Serialize(CArchive,D.:Serialize(CArchive&ar)if(ar.IsStoring()/写入数据成员代码else/读取数据成员代码,B.Serialize(CArchive,图9-9用Serialize()函数实现序列化,CArchive&ar,A:Serialize(),B:Serialize(),C:Serialize(),D:Serialize(),E:Serialize(),写顺序,读顺序,File|Save,File|SaveAs,File|Open,图9-10图9-6对象按图9-9用Serialize()函数实现序列化的过程,菜单命令,OnFileSave(),OnFileSaveAs(),OnFileOpen(),文件对象,缓冲区,图9-11分别按下鼠标左键和右键显示大写字母M和小写字母m,图9-12打开文件后的结果,CArchive类的对象ar,磁盘,永久性类(为CObject的派生类),DECLARE_DYNCREATE()IMPLEMENT_DYNCREATE()类信息表声明和实现,DECLARE_SERIAL()IMPLEMENT_SERIAL()序列化声明和实现,对象的数据成员,Serialize(),图9-13具有永久性能力类的示意图,CFile对象,调用内嵌对象的Serialize(),缓冲区,图9-14例9-6运行后用鼠标点击出的图形,图9-15当用户试图关闭该文件时程序会给出保存的提示,CWnd,CCmdTarget,CStatic,CObject,图10-1CStatic类的继承关系,图10-2例10-1程序运行结果,CWnd,CCmdTarget,CButton,CObject,图10-3CButton类的继承关系,图10-4例10-2程序运行结果,CWnd,CCmdTarget,CEdit,CObject,图10-5CEdit类的继承关系,图10-6例10-3程序运行结果,图10-8微调器的外观,编辑框,微调器,图10-11例10-5程序运行结果,图10-12例10-6程序运行结果,载入对话框模板,OnInitDialog(),OnCancel(),OK按钮消息,消息循环,EndDialog(),UpdateData()EndDialog(),图11-5DoModal()函数的执行过程,OnOK(),Cancel按钮消息,UpdateData(),returnIDCANCEL,returnIDOK,图11-6对话框的外观,图11-7系统提供的对话框外观,图11-8AddingaClass对话框,图11-9NewClass对话框,图11-10在按下了OK按钮后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创业加盟项目合同标准文本
- 内部食堂餐饮合同样本
- 劳动仲裁续签合同标准文本
- 分组仓库合同样本
- 出售机器合同标准文本
- 农田租用合同样本
- 办公楼层物业合同样本
- 借壳投标合同样本
- 中介房屋包租合同样本
- 人才培养合同样本
- 2025年北京京能清洁能源电力股份有限公司招聘笔试参考题库含答案解析
- 毕马威-海南自贸港旅游零售白皮书2025版:韧性前行潜力无限
- 2025年上海市闵行区高三语文二模试卷及答案解析
- 2025年教师资格师德师风建设试题及答案
- 期中测试卷(1-5单元)(试题)(含答案)-2024-2025学年二年级下册数学青岛版
- 2025届北京市顺义区高三下学期一模英语试题(原卷版+解析版)
- 2025年形势与政策-加快建设社会主义文化强国+第二讲中国经济行稳致远
- 激光雷达笔试试题及答案
- 2025届高三湖北省十一校第二次联考英语试卷(含答案详解)
- 信息技术与小学教育教学融合
- 产品设计研发费用统计表
评论
0/150
提交评论