- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 肉牛生产性能测定技术规范-编制说明.pdf VIP
- 中医药治疗乙型肝炎的优势及存在的问题.docx VIP
- 高危新生儿眼病筛查分类管理专家共识(2024).pptx VIP
- 24J306国家建筑标准设计图集.docx
- 汽车轮毂结构优化与轻量化设计研究.docx VIP
- 生物质呋喃基新材料呋喃二甲酸(FDCA)项目可行性研究报告写作模板-申批备案.doc
- 2025年搬运机器人行业研究报告及未来五至十年行业预测分析报告.docx
- FDCA行业动态报告:FDCA发展潜力巨大,下游制成PEF替代空间广阔.docx
- 学前儿童美术教育与活动指导第4版全套教学课件.pptx
- 预算编制服务投标方案(技术标).pdf
文档评论(0)