首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2012中考 | 2012高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 托业 | 雅思 | 专四专八 | 口译笔译 | 博思
GRE GMAT | 新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 |
零起点法语 | 零起点德语 | 零起点韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师 | 秘书资格 | 心理咨询师 | 出版专业资格 | 广告师职业水平 | 驾驶员
网络编辑 | 公共营养师 | 国际货运代理人 | 保险从业资格 | 电子商务师 | 普通话 | 企业培训师
营销师
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
化工工程师 | 材料员
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
计算机等级考试
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > C加加 > 复习资料 > 正文

2012年计算机等考二级C++备考笔记(十一)

来源:考试吧Exam8.com) 2012-7-24 10:19:21 考试吧:中国教育培训第一门户 模拟考场

  Windows内部运行机制

  Windos系统提供了各种各样的函数,这些函数是windows操作系统提供给应用程序的接口 Application Progress Interface,所有主要的windows函数都在Windows.h头文件中进行了声明。

  Win32 SDK(Soft Development Kit)是Windows 32平台下的软件开发包,包括API函数,帮助文档和一些辅助开发工具。

  Windows是基于消息机制的,消息分标准消息,命令消息和通告消息。Windows程序中的消息又分进队消息和不进队消息,两种消息都由消息响应函数进行处理。

  在VC中创建一个win32应用程序的大概流程如下:

  编写WinMain函数;

  设计窗口类(WNDCLASS);

  注册窗口类(RegisterClass);

  创建窗口(CreateWindow);

  显示并更新窗口(ShowWindow|UpdateWindow);

  编写消息循环;

  编写窗口过程函数。

  一个WinMain函数的原型如下:

  int WINAPI WinMain(

  HINSTANCE hInstance, // handle to current instance

  HINSTANCE hPrevInstance, // handle to previous instance

  LPSTR lpCmdLine, // command line

  int nCmdShow // show state

  );此处WINAPI是一个_stdcall宏定义,VC有很多宏定义,这个很让人头大,需要慢慢去习惯,从网络上找了2中函数定义的说明与区别解释。

  __cdecl:这是编译器默认的函数调用转换方式,它可以处理可变参数的函数调用。参数的入栈顺序是从右向左。在函数运行结束后,由调用函数负责清理入栈的参数。在编译时,在每个函数前面加上下划线(_),没有函数名大小写的转换。即_functionname.每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。

  __stdcall:函数参数从右向左入栈,被调用函数负责入栈参数的清理工作。函数名转换格式如下:_functionname@number.函数参数个数固定。

  WINDOWS 的函数调用时需要用到栈( STACK ,一种先入后出的存储结构)。当函数调用完成后,栈需要清除,这里就是问题的关键,如何清除?

  如果函数使用 _cdecl ,那么栈的清除工作是由调用者,用 COM 的术语来讲就是客户来完成的。这样带来了一个棘手的问题,不同的编译器产生栈的方式不尽相同,那么调用者能否正常的完成清除工作呢?答案是不能。

  如果使用 __stdcall ,上面的问题就解决了,函数自己解决清除工作。所以,在跨(开发)平台的调用中,我们都使用 __stdcall (虽然有时是以 WINAPI 的样子出现)。

  那么为什么还需要 _cdecl 呢?当我们遇到这样的函数如 fprintf() 它的参数是可变的,不定长的,被调用者事先无法知道参数的长度,事后的清除工作也无法正常的进行,因此,这种情况我们只能使用 _cdecl。

  到这里有一个结论,如果你的程序中没有涉及可变参数,最好使用 __stdcall 关键字,我们创建一个Win32应用程序都是用的系统API函数,参数固定,所以都用__stdcall了。

  设计窗口类、册窗口类、创建窗口、显示并更新窗口通常一起完成,MSDN中有详细的说明,可以根据一些默认参数修改窗口样式。在完成窗口的设计,创建更新后,需要创建一个消息循环。

  MSG msg;

  while(GetMessage(&msg,NULL,0,0))//消息循环

  {

  TranslateMessage(&msg);//将虚拟键值消息转化为字符消息,并将字符消息投递到消息队列中

  DispatchMessage(&msg);//分派一个消息窗口,对消息进行处理

  }

  GetMessage函数接收到的消息除了WM_QUIT外都返回非零值。

  消息响应函数对消息队列中的消息事件执行处理,在窗口初始化的时候将函数的指针提供给窗口,当事件发生的时候调用函数,消息响应函数在定义前必须在窗口注册,创建等过程前事先声明。

  DC:Device Contex,是一个包含设备信息的结构体,这个地方的概念不大容易理解。

  Windows创建了自己的命名约定,称之为匈牙利命名法,通常在变量前面加上一些前缀字符。

  最后,把原书的代码抄一遍,虽然是照的书本写,过程中还是出了一些错误,好不容易才调试完。VC开发环境的提示功能几乎为零,god!

1 2 3 下一页

  相关推荐:

  2012年计算机等考四级数据库工程师备考笔记汇总

  2012年计算机等级考试二级VB重点知识汇总

  2012年下半年计算机等级考试报名时间及入口汇总

文章责编:renyinan  
看了本文的网友还看了
文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。