欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    MFC编程案例chapter019.pdf

    • 资源ID:70010297       资源大小:267.25KB        全文页数:10页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    MFC编程案例chapter019.pdf

    下载下载附录D 开发中注意事项还剩下一些问题没有讨论,下面这些问题虽然与 V C+或M F C类库无关,但在应用创建一个应用程序时,也是同样重要的。设置Developer StudioDeveloper Studio可以轻松地设置为符合个人开发应用程序的标准。这里我们将讨论其中的一些选项。调试有一些资源可以用来调试应用程序,除了在运行应用程序的调试版时明显可用的交互调试器外,还可以调用框架、DEVELOPER STUDIO,甚至M F C类函数以及第三方运行调试器。组织和建立工程如果应用程序只是一个执行文件,而没有附加的 D L L文件时,则你可能停留在工程的工作空间范围内。然而,如果应用程序涉及多个库和多个执行文件时,则需要考虑建立和维护工程的策略问题。Microsoft 命名习惯这里讨论M i c r o s o f t坚持的某些非正式的和完全自愿的变量命名习惯。S p y i n gS P Y.E X E是潜在的工具,它不仅可调试自身的应用程序,而且也作为一种“监视”其他应用程序的方法,以推算出他人是怎样执行他们的界面的。其他例子资源除了本书例子以外,我们还介绍可以参考的其他例子资源,这些资源可能有一个或多个打算在应用程序中用 MFC VC+执行的例子。D.1 设置Developer StudioD.1.1 激活其他应用程序Developer Studio可在To o l s菜单中添加定制菜单命令,在环境内运行其他应用程序,方法如下:1)单击To o l s/C u s t o m i z e菜单命令,以打开C u s t o m i z e属性表。2)选择To o l s选项卡,并滚动到菜单列表的底部(Developer Studio应该已经在该菜单中预装了几个命令)。3)选中底部的空白焦点矩形,并输入需要在菜单中显示的名字;按回车键将打开三个编辑框,分别是C o m m a n d、A rg u m e n t s和Initial Directory。4)在C o m m a n d中,输入要运行的执行文件的路径名。5)在A rg u m e n t s中,输入传递给执行文件的参数。6)在Initial Directory中,输入运行该命令前Developer Studio应该改变的目录。可把下面的命令添加到To o l s菜单:E x p l o r e r命令使Windows Explorers最初在工程目录中打开。菜单名字输入到E x p l o r e r中。命令输入C:Wi n d o w s e x p l o r e r.e x e或C:Wi n n t e x p l o r e r.e x e(根据操作系统而定),参数输入/e,并使初始目录(Initial Di r e c t o r y)为空白。D O S命令打开一个初始在工程目录下M S-D O S窗口。菜单命令输入M S-D O S,命令输入附录D 开发中注意事项331下载C:Wi n n t S y s t e m 3 2 c m d.e x e或C:Wi n d o w s c o m m a n d.e x e(根据操作系统而定),没有参数,在初始目录中输入$(当前目录)。E d i t o r命令打开一个第三方文本编辑器,并传递当前选中的文件名到该编辑器;虽然环境提供的文本编辑器是相当有效的,但市场上还有一些更加好用的编辑器。在菜单命令中输入E d i t o r,在命令中输入编辑器的路径,在参数中输入$(FileName)$(FileExt),在初始目录中输入$(WkspDir)。当执行任何一个这样的菜单命令时,Developer Studio保存所有的文件,以便即使在调用该外部编辑器前修改了一个文件,打开该文件时,还是可以编辑它的最新版本。D.1.2 工具栏按钮Developer Studio允许配置工具栏中的按钮。1)单击To o l s/C u s t o m i z e菜单命令打开C u s t o m i z e属性表,并选择C o m m a n d s选项卡。2)可以把按钮组框中所示的按钮拖到一个已有的工具栏中,或者拖到一个空白空间以创建一个新的工具栏。3)Category组合框改变可选的按钮选项。4)要删除一个按钮,把它拖回到Property Sheet中。单击C o m m a n d选项页上的每个图标将显示它所代表的命令的说明。通过查看菜单本身,用户可以发现哪个预定义的图标与哪个预定义的菜单命令对应;显示在菜单命令边上的图标是它们的工具栏按钮。工具栏按钮可能代表的命令如下:添加到To o l s菜单的任何命令,通常以 7开始。因此,在该页的 To o l s目录中找到一个按钮图标,它具有一个小铁锤和一个 7在第一个命令的右下角。C l a s s Wi z a r d,该命令可以在Vi e w目录下找到,一个具有巫士魔术棒的三角形。Open Wo r k s p a c e命令是一个最常使用的命令,但没有默认的工具栏按钮;可以通过选择All Commands目录为该命令创建一个按钮;在 All Commands目录中,可以看到所有Developer Studio命令的一个详细列表;滚动目录直到接近底部找到 Wo r k s p a c e为止;拖动该选项到工具栏上的一个位置。因为该命令没有一个默认的工具栏图标与之关联,S t u d i o会提示一个可以分配给该按钮的常规图标的列表;还可以选择在按钮中包括菜单命令的名字。注意按自己的意愿定制S t u d i o后,应立即退出,因为对工具栏和菜单所做的改变直到退出S t u d i o时才能保存,如果S t u d i o在正常退出前崩溃,则所有改变将无效;此外,还要注意一次运行多个 S t u d i o实例的情况,确保最后一个退出的 S t u d i o是需要改变的Studio。因为,最后退出的Studio决定最终改变Studio配置。D.2 调试大多数调试工作可以通过 S t u d i o的Text Editor界面完成,参见M F C文档可获得更详细的内容。然而,还有其他一些资源可以用来调试代码,下面介绍一些。D.2.1 TRACE()如果应用程序是时间或序列敏感的,可能需要打印出调试消息,而不用交互式调试器单步执行通过一个关键部位;过去,程序员用 printf()语句把调试消息打印到打印机或磁盘文件上;现在应用程序框架提供了一个与 printf()命令相当的TRACE()函数,但是TRACE()直接打印到S t u d i o的D e b u g窗口。它要求打印字符不超过5 1 2个,一个例子如下:注意 在语句结束时一定要用换行符(n)!TRACE(Integer=%d,String=%sn,i,sz);A f x Tr a c e E n a b l e d=FALSE;/turns off all TRACE()statements注意TRACE()语句在应用程序发行版中有问题时,如果问题只出现在发行版中,则必须改用printf(),还可以用下面即将讨论的AfxMessageBox()。D.2.2 AfxMessageBox()如果问题只出现在没有安装 Developer Studio的操作系统上的应用程序中,或只出现在应用程序的发行版中时,除了在软件中用 printf()外,还可以考虑使用AfxMessageBox();可以格式化一个消息或创建一个静态消息,用以指示应用程序通过一个关键部位时的过程,并用AfxMessageBox()显示这些消息;AfxMessageBox()甚至可以不必在一个控件窗口的类中,或者根本不必在一个类中。D.2.3 ASSERT()和VERIFY()另外两个用来检查工作的全局函数是 A S S E RT()和VERIFY(),这些宏通常用来检查传送到一个函数的参数是否合法。如果这些参数来自用户的输入,可能还要用 AfxMessageBox()显示某种错误消息;但是,如果该参数源于应用程序的其他部分,则可以使用具有更小系统开销的A S S E RT()和VERIFY(),M F C库用A S S E RT()和VERIFY()防止任何愚蠢的错误导致奇异的结果。在应用程序的调试版中,A S S E RT()和VERIFY()核查一个合法的C或C+表达式,如果不是T R U E,则显示一个错误消息并退出应用程序;在应用程序的发行版中,A S S E RT()不做任何事情甚至不核查括弧内的表达式,VERIFY()虽然核查表达式,但如果发现错误,还是不能停止应用程序的发行版。这两个宏的例子如下:A S S E RT(this)/if false,debug application aborts/statement not evaluate on release/versionVERIFY(GetFile(.)/if false,debug application aborts/statement still evaluated in release/versionD.2.4 Dump()每个从C O b j e c t派生的类都继承一个D u m p成员函数,该函数在概念上与 Serialize()相似,但是,它可以输出类中所有可读格式的成员变量,可以转储文档中的一个或所有对象,方法与用Serialize()串行输出所有数据对象到磁盘(见例6 7)一样;但是,与Serialize()不一样的是,不是把存档类的实例传递给 Dump(),而是把一个转储环境的实例传递给它。可以用默认的a f x D u m p转储环境,它将输出显示在S t u d i o的调试窗口中,或者可以用一个文件:CFile file;file.Open(dump.txt,CFile:modeCreate|CFile:modeWr i t e);332第五部分 附录下载附录D 开发中注意事项333下载CDumpContext dc(&file);然后,用下面的语句转储一个对象:p O b j e c t-D u m p(&d c);如果要实现一个完全转储系统,可以用菜单命令调用第一个 Dump()函数。然后,文档中的所有其他Dump()函数以递减的模式被调用。一个Dump()例子如下:void CMyData:Dump(CDumpContext&dc)const CObject:Dump(dc);dc Item 1=m_nItem1;dc Item 2=m_nItem2;dc Item 3=e r r.e r r这将引起质问,从哪里得到一个.m a k文件?更早版本的环境自动产生它们,然而,最新版本使它成为用户必须设置的一个选项。4)单击Developer Studio的To o l s/O p t i o n s命令,并选择B u i l d选项卡。5)然后,在保存工程时,确保设置了 Export makefile选项。你可能不想为大型工程做这样工作,因为 m a k e f i l e输出减慢了单个工程的保存;而更希望每当工程改变时,简单地创建一个新的 m a k e f i l e;要用命令创建一个 m a k e f i l e,只需单击Project/Update Makefile。当在Developer Studio外面,以批处理模式建造时,则在 Developer Studio之内设置的目录不再适用;编译器和连接器现在将使用定义在操作系统环境中的路径;因此,要再次使编译器和连接器知道公共的 i n c l u d e和 l i b目录在哪里,必须把下面的语句添加到Developer Studio中。l i b=l i bi n c l u d e=l i bpath=lib(so that dll files can be found)对于Windows NT,必须用控制面版上的S y s t e m应用程序改变系统变量,并应重新启动计算机。D.3.7 Build Machine和Developer Workspace前面已提过,更新版本的 Developer Studio不能自动产生一个.m a k文件,但是,它们使用两个新文件:一个.d s p文件(它跟踪单个工程),和一个.d s w文件(它跟踪工作空间)。一个工作空间可能包含几个工程,这些工程之间甚至相互具有依存;因此,如果使用更新版本的Developer Studio的话,可能还想用这些应用程序按下面的步骤创建一个大工程。1)假设已有一些.d l l或.e x e工程子目录,用Developer Studio打开主.e x e工程的.d s w文件。2)在Developer Studio的P r o j e c t菜单中,用Insert Project into Wo r k s p a c e命令添加所有其他应用程序到该工程的工作空间中。3)再次在P r o j e c t菜单下,用D e p e n d e n c i e s命令设置整个工程的所有依存。例如,选择一个.e x e工程,然后单击所有必须在该工程建立前要建立的.d l l工程。4)可以用Project/Set Active命令确定要求Developer Studio Build或Build All时建立哪一个工程,如果想使主.e x e工程成为主动的工程,则可以只通过单击B u i l d或Build all重建整个工程。5)如果想建立整个工程的调试版和发行版,而在完成以后不必返回,可以用D e v e l o p e rStudio 的B u i l d菜单,选择Batch Build命令并选择一切以建造一切。6)该工作空间配置保存在.d s w文件中,对于一个特别大的工程,可以考虑在B u i l dM a c h i n e上拥有一个包含整个工程的.d s w文件。D.3.8 Build Kit规划一个大型应用程序的最后一步是创建一个 Build Kit。一个Build Kit只是文件的一个选项,任何人可以用来创建一个新版的应用程序,这包括 i n c l u d e和 l i b目录下的文件,以及建库所用的源文件(可选)。Build Kit应当驻留在Build Machine中,并在建造下的一个单独的目录中,使K i t单独设置一个目录允许被新的开发使用,即使在一个新建造中间也可以使用。并且,如果新的建造不能正确地起作用时,在修复该建造时不延误任何他人的新工作;一旦一个建造被证实起作用后,另一个批处理文件可以用来把它拷贝到 Build Kit目录中。D.4 Microsoft 命名习惯M i c r o s o f t已为MFC C+编程时使用的程序变量设立了一种非正式的自愿的命名习惯。尽管这种习惯并不强求在创建一个 M F C应用程序时使用,也许并不总是实用的,但它确实有一些优点。除了能给一个变量常规的描述名以外,用这种习惯还可以分辨一个变量的类型以及是否一个类的成员变量。以下面符号开始的变量含义:m _一个类的成员变量m _ b布尔变量m _ n整型变量m _ p指针变量m _ d wD W O R D变量m _ c l a s s n a m e在c l a s s n a m e中指定的类类型批评这种习惯的人指出,这有悖于语言的灵活性,例如在命名变量 m _ b F l a g以后,现在要将它转变为整型,而不编辑所有出现的地方或不管它,是非常困难的,并有可能迷惑未来的软件开发者。然而,据笔者个人经验,很少需要改变变量类型,而且能够迅速区别一个变量做什么用,远远胜过它具有的不足。D.5 Spying在V C+开发包中可能被忽略的应用程序是 S P Y.E X E,这个小应用程序不仅可以帮助你指出应用程序正在进行什么,而且正如其名字的含义一样,它能指出他人怎样在应用程序界面中操作窗口。D.5.1 发现消息可以读到想知道的所有关于哪一个窗口消息对于应用程序中的哪一个窗口是可用的,但是,当所有应用程序的界面成份都被叠在一起时,每个人都会猜测什么消息是可用的。要确附录D 开发中注意事项337下载切地发现这些消息,用S P Y.E X E应用程序截获并显示每个可视窗口的所有消息。1)运行应用程序开始。2)然后执行S P Y.E X E(这可以在MFC C+的 b i n目录下找到)。3)单击S p y的S p y/M e s s a g e菜单命令,打开Message Options属性表。4)找到Finder To o l,并把它拖到想要监视的窗口。一个新的窗口将在S p y内打开,并开始显示进出那个窗口的窗口消息;从那里,用户可能会看到一个未曾想过要处理的窗口消息。D.5.2 发现窗口用那个相同的 Finder To o l,有时可以猜出他人怎样用他们的界面实现一个作用;例如,可以确定该效果是否是以前不曾用过的窗口风格,还是其他应用程序开发者自己开发的。如前面一样抓住Finder To o l,但是现在把它拖到当前考虑效果的窗口中,下面窗口的大小将被突出显示,并显示出它的类和风格。有时,你可能为所发现的效果而惊讶!D.6 其他实例资源如果不能在本书中找到一个需要的例子,在本书之外还有其他例子资源,如你的 V C+发布工具C D带有它自己的例子目录;另外一个优秀的,但是不常用的例子资源是创建 M F C类库的源文件集,可以在 V C+的 m f c s r c目录下找到,这里也是查找非文档化虚拟 M F C函数的地方。另一个例子资源可以在I n t e r n e t上找到:f t p:/f t p.m i c r o s o f t.c o m/S o f t l i b/M S L F I L E S/但是必须在3 A.M.时间访问它,并且它只限2 5 0 0个用户访问。338第五部分 附录下载

    注意事项

    本文(MFC编程案例chapter019.pdf)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开