Windows程序内部运行机制及范例.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文档。上传文档
查看更多
Windows程序内部运行机制 1.1 API与SDK Visual Studio 2005这个是一个庞大的体系(包含很多的内容:Visual C++ 2005、Visual C# 2005等),它是建立在.NET技术的基础之上的。 API:Application Programming Interface,应用程序编程接口,实际上就是微软给程序员提供的一系列的编程函数库,程序员利用这这些函数,可以方便地编写自己的应用程序(主要是在Windows下的应用程序),这些函数都是面向过程OP的(结构化的程序设计方法思想,与面向对象OO相区别),就像我们普通的C程序一样,一步一步地运行。而面向对象的思想是完全的。 Win32 SDK:Software Development Kit,软件开发包,在这个包中,就将上面的一系列的函数包装成了面向对象的(以类的形式)给程序员进行开发。 MSDN:微软的帮助文档。 1.2 窗口与句柄 窗口(window)可以有一个父窗口,当然也可以没有。 句柄:Handle,实际上是一个long型的变量,当然在VC中,指针pointer也是long型,所以,Handle也是指针。Windows通过Handle来区别不同的对象(主要是窗口中),并对他们进行管理。窗口的Handle就是窗口句柄,用HWND来标识。 1.3 消息与消息队列 1、消息:Message。 Windows与DOS的运行机制是完全不同的。 在DOS中,我们是以中断的方式来,用中断的最主要的缺点1)中断是采用程序轮询方式(就是程序进入一个死循环,不断地查询这个事件是否已经发生),这样,不管事件是否已经发生,CPU都在运行,大量地浪费了CPU时间。2)中断是阻塞方式的,如果这个事件还没有发生,则程序就不会返回,会一直地运行下去。这样就无法实现多道程序设计(多线程)。 消息方式:现在的操作系统如Windows、Linux、UNIX等,都使用消息机制。消息机制是建立在消息(Message)基础之上的:用户如果使用消息机制进行编程,如建立了一个按钮,这个按钮用户可以点击,但是,我们编程不需要循环来检测这个按钮何时被用户点击,而是将这个交给了操作系统,操作系统会感知这个按钮是否被点击,如果被点击,则操作系统会生成一个消息来告诉我们的程序,这样我们的程序可以进行处理。 typedef struct message{ HWND?hwnd; //消息所属的窗口句柄 UINT?message; //消息的类型,如0x0001表示什么消息,在Windows中,以WM_XXXX来指明这是属于什么消息,方便程序员的记忆,如WM_LBUTTONDOWN等。 WPARAM?wParam; //消息的附加信息,如鼠标按下去的消息, LPARAM?lParam; // DWORD?time; //消息形成的时间 POINT?pt; //消息形成的坐标,主要对鼠标消息有用 } MSG, *PMSG; UINT:无符号的int类型,unsigned int。 POINT,坐标类型 2、消息队列 在Windows系统中,经常会生成大量的消息,这些消息需要一个一个地投送出去,因此,在投送之前,需要保存好,先将它们放在一个队列中,然后遍历这个队列,将消息一个一个发送出去。 有可能会造成死锁,如果消息产生得太快,处理不过来,系统会进入一种死机一样的模式。最经常出现这种情况的就是定时器,如果我们将定时器的时间设得太短(如1毫秒),而处理一个消息需要的时间又大于1毫秒,则消息就处理不过来。 有一些消息,Windows会智能化,处理不过来的不重要的消息,会直接丢掉。 3、进队消息和不进队消息 1.4 WinMain函数 1.4.1 WinMain函数的定义 我们知道,在C程序中,都是以main函数开始运行的,但是在Windows 32位(像XP、Windows 2000都是32位的)系统中(Win 32)。程序的入口就是WinMain函数。 int?WinMain(?????? ????HINSTANCE?hInstance, //实例句柄,就是当前这个应用程序的句柄 ????HINSTANCE?hPrevInstance, //在Win32下,这个参数总是NULL ????LPSTR?lpCmdLine, //命令行字符串 ????int?nCmdShow //窗口的显示方式(是显示还是隐藏) ); 这四个参数由操作系统自动设置好值,我们不要改变它们,但是我们可以将他们保存起来,后面可能有用。 LPSTR:long point string,以空(NULL)结尾的字符串指针。 长指针:一个指针中不但包含了offse

文档评论(0)

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

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

1亿VIP精品文档

相关文档