Windows应用程序界面的设计_第1页
Windows应用程序界面的设计_第2页
Windows应用程序界面的设计_第3页
Windows应用程序界面的设计_第4页
Windows应用程序界面的设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第6章Windows应用程序界面的设计凡是对Windows应用程序有一定了解的人都知道,Windows应用程序界面具有大量的窗口和对话框。应用程序的窗口设计得好坏会直接影响到应用程序的质量。2本章主要内容SDI界面和MDI界面。SDI界面窗口的样式。拆分窗口及其显示的同步更新。带有滚动条窗口的创建。36.1SDI和MDI界面SDI(单文档界面)MDI(多文档界面)MDI框架窗口是CMDIFrameWnd派生类对象框架窗口中的子窗口是CChildFrame派生类的对象46.2SDI界面窗口的样式使用MFC可以设计多种样式的应用程序窗口。设计时,既可以在向导MFCAppWizard的各个对话框中以选项的方式确定程序的窗口样式,也可以在框架窗口类的成员函数PreCreateWindow中用代码来选择程序的窗口样式。56.2.3可拆分为小窗口的SDI界面作用:从不同位置观察大文档;针对同一文档提供不同视图。注意:在MFC中只有具有文档/视图结构的应用程序才可以设计可拆分窗口的界面,因为只有在这种结构中才能对同一文档对象建立多个视图对象。方法:通过MFCAppWizard66.3拆分窗口的同步更新及更新效率6.3.1拆分窗口的同步更新为何要同步更新?如何同步更新?voidUpdateAllViews(CView*pSender,LPARAMlHint=0L,CObject*pHint=NULL);

例6-2

可以同步更新所有窗口的应用程序。76.3.2提高拆分窗口更新效率的方法全部更新的潜在问题: 效率低,可能引起闪烁解决方法:只更新被修改的部分1.理解视图类的成员函数InvalidateRect无效显示区:需要重绘的矩形区域voidInvalidateRect(LPCRECTlpRect,BOOLbErase=TRUE);

86.3.2提高拆分窗口更新效率的方法2.理解文档类的成员函数UpdateAllViews本视图更新使用InvalidateRect来提高效率但其余视图还得通过UpdateAllViews(this)问题:如何让其他视图也仅对无效区域重绘呢?其实文档类的成员函数UpdateAllViews之所以能够通知与文档对象对应的所有视图进行显示更新,是因为在UpdateAllViews函数中调用了各个视图的成员函数OnUpdate:virtualvoidOnUpdate(CView*pSender,LPARAMlHint,CObject*pHint);96.3.2提高拆分窗口更新效率的方法图6-13程序员应该设计一个以CObject为基类的类,在该类中封装无效区域的相关数据及算法,然后创建这个类的对象,并以这个对象的指针作为实参调用函数UpdateAllViews,然后在函数OnUpdate中计算出无效区域的矩形后,再调用InvalidateRect函数来触发OnDraw对无效区域进行重绘。106.3.2提高拆分窗口更新效率的方法例6-3

编写一个带有可拆分窗口的SDI应用程序,当鼠标单击窗口用户区时,可以在鼠标位置出现一个直径大小随机的圆。要求使用无效区进行窗口显示的同步更新。116.4创建带有滚动条的窗口为了使程序员可以很方便地创建各种不同形式的程序界面,MFC以CView类为基类派生了一些具有增强功能的派生类。在程序框架向导MFCWizard的第6步进行选择。126.4创建带有滚动条的窗口两种方法创建带滚动条窗口:方法一:创建工程时在MFCAppWizard-Step6中选择CScrollView类为应用程序视图类的基类。

滚动条在哪里?方法二:手动修改,将视图类的源文件和头文件中的CView全部替换为CScrollView。

为何会出错?136.4创建带有滚动条的窗口CView::OnInitialUpdate

virtualvoidOnInitialUpdate();

该函数只在生成视图对象且与文档结合时,被程序框架调用一次,因此这是初始化滚动条参数的地方。CScrollView::SetScrollSizes

voidSetScrollSizes(int

nMapMode,SIZEsizeTotal,constSIZE&sizePage=sizeDefault,constSIZE&sizeLine=sizeDefault);146.4创建带有滚动条的窗口例6-4

把例6-3的程序界面改为一个带有滚动条的窗口,文档的宽为3000,高为2000,滚动页为50,滚动行为10.逻辑坐标:

CDC的作图函数均使用逻辑坐标设备坐标: 消息响应函数均使用设备坐标156.4创建带有滚动条的窗口CView::OnPrepareDC

virtualvoidOnPrepareDC(CDC*pDC,CPrintInfo*pInfo=NULL);CDC::DPtoLP

voidDPtoLP(LPPOINTlpPoints,int

nCount=1)const;voidDPtoLP(LPRECTlpRect)const;voidDPtoLP(LPSIZElpSize)const;CDC::LPtoDPvoidLPtoDP(LPPOINTlpPoints,int

nCount=1)const;voidLPtoDP(LPRECTlpRect)const;voidLPtoDP(LPSIZElpSize)const;16小结Windows应用程序的界面有单文档界面和多文档界面的区别。每次绘图操作结束后要调用视图类的成员函数InvalidateRect()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论