MFC一些调用的步骤.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MFC一些调用的步骤

MFC一些调用的步骤 1、第一步,全局对象“theApp”的构造函数; ? 2、真正的main函数隐藏在框架内,IDE下 按F11可以进入Main函数 ? 3、跳转到AfxWinMain函数,看到调用了“InitInstace”虚函数,另外CWinAPP原来是从CWinThread派生的,是一个线程,以前没注意 ? 4、最后进入了CWinThread::Run函数,也就是进入了消息泵 AfxMessageBox引起死机 1、在CListCtrl右键菜单的执行中; 2、AfxMessageBox的数据量4K左右; 结论: 不要用AfxMessageBox显示大量的数据 VC++ 6.0的小花招 Visual Studio系列中产品中,Visual Studio 6.0是最经典的一个版本,虽然后来有Visual Studio .NET 2003,以及2005,也确实添加了很多让我觉得激动的特性,但是从使用细节的细腻程度上来看,VS 6.0无疑是最棒的。我们一些同事甚至试图把2005的C++编译器独立的拿到Visual Studio 6.0中来用,也不愿意升级到.NET上来用,可见其魅力。 ? 和VS 6.0这个产品的成熟相比,VC++ 6.0的编译器的的确确相对来说有些糟糕,其中最被诟病的是对模板技术支持很不好。下面我想做的一件事情,就是向那些继续留恋VC++ 6.0的朋友,介绍一些小花招,来避开VC++ 6.0的一些编译器缺陷。 ? ? 1)for (type var=expression;;) 中变量var的作用域问题。 ? 按照C++标准,这里定义的变量var出了for循环应该被销毁。也就是说下面这段代码是有效的: ? ?? for (int i = 0; i 100; ++i) ?????? func(); ?? for (int i = 0; i 100; ++i) ?????? func2(); ? 而下面这段代码应该编译不过: ? ??? for (int i = 0; i 100; ++i) ??? { ???????? if (has_found_it()) ???????? { ???????????? handle_find_result(); ???????????? break; ????????? } ??? } ??? if (i == 100) ???????? do_not_found(); ? 然而VC++ 6.0对于第一段代码会报变量i重复定义错误,而第二段代码编译通过。 ? 为了让VC++ 6.0的for语句看起来符合C++标准,你可以这样做: ? ?? #define for if (0); else for ? 你会发现很有趣,这样define一下后,VC++ 6.0的for语句完全符合C++标准了!而且由于编译器的优化,Release版本不会增加任何额外的开销。 ? 喜欢“钻牛角尖”的朋友可能会说:嗯,不错的主意。但是——为什么不这样做: ? ?? #define for if (1) for ? 嗯?看起来也可以。还是让我们看一个用例: ? ?? if (cond) ????? for (int i = 0; i 100; ++i) ????????? func1(); ?? else ?????? func2(); ? 进行宏代码展开后,成为: ? ?? if (cond) ?????? if (1) ?????????? for (int i = 0; i 100; ++i) ?????????????? func1(); ?????? else ?????????? func2(); ? 这个结果显然不能符合我们的原意。这里func2();语句永远得不到执行机会。 ? ? 2)模板参数类型如果不出现在参数列表中,则不能作为返回值类型。 ? 由于编译器的缺陷,VC++ 6.0不支持以下这种用法: ? ?? template class T1, class T2 ?? T1 func(T2 arg) ?? { ?????? T1 var; ?????? ... // 处理var过程 ?????? return var; ?? } ? ?? void test() ?? { ?????? int result1 = funcint(1); ?????? double result2 = funcdouble(2); ?? }; ? 很抱歉,这种用法VC++ 6.0不支持。让人恼火的是,VC++ 6.0编译时不会提示错误,但是生成的执行代码却很成问题。 ? 究其原因,是因为VC++ 6.0的template技术是在编译器的较高层次做的,真正的编译器核心并不考虑模板。以上面

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档