- 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 API编程2007年10月20日 星期六 20:29WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制……WinSDK是编程中的传统难点,曾经听有一个技术不是很好的朋友乱说什么给你API谁都会用,其实并非那么简单,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制。首先来谈谈句柄,初学习WinSDK的朋友刚看到这个词头大了吧?其实我也是了,我们来看看programming windows里面是怎么说的,一个句柄仅仅是用来识别某些事情的数字。它唯一的标识这当前的一个实例。这样说确实不容易懂。那么我们这么看,比如你打开 windows自带的计算器。你多打开几次是不是桌面上出现了很多个计算器呢?你使用其中一个计算器的时候当你按下等于按钮的时候运算结果是否会出现在其他的计算机结果栏里?不会,那windows怎么知道让结果出现在哪里呢?这就是句柄的作用了,句柄唯一的标识着一个程序,你打开的每一个窗口(计算器) 都有一个不同的句柄你你每一步操作都是指定了在某个句柄下的,所以,他不会出错。而且你打开的每一个计算机都共享着同样的代码和内存。通过句柄系统会把所需的资源充分的调用到当前的某个程序自己的数据区。不仅是窗口,各种菜单,GDI对象都有自己的句柄,获取句柄的手段也是多重多样,不过当然是通过调用API函数实现了,如:MFC中的hHandle = GetSafeHandle();API编程中的hBrush = GetStorkObject(BLACK_BRUSH);很多操作都需要将句柄添加到参数列表中,当你没有直接定义句柄变量的时候可能要记忆很多API的返回类型来间接获取。如:????? hPen = SelectObject(hdc,GetStockObject(logicpen));// SelectObject()这个函数在设置本设备描述表下的GDI对象时会返回设置前的GDI对象句柄MoveToEx(hdc, pt1.x, pt1.y, apt);LineTo(hdc, pt2.x,pt2.y);SelectObject(hdc,hPen);完成选择自定义的GDI对象的操作。句柄的种类很多,掌握一种的使用方法所有的不学自通,WinAPI编程永远伴随的元素中句柄是其中之一。非常重要。由于是浅谈,所以就说到这里了.接下来是windows下的消息映射机制了,呵呵,窗口过程,刚学的朋友难理解吧?WinSDK编程基于C,但是和C的理念有着完全的不同,这中间的不同,在我看来最多的也就是来自于这个消息映射,后面什么吹的很炫的Hook技术,木马技术,键盘截获,都是来自于特殊消息的捕捉,映射自定义的特殊消息来实现的(当然和我接下来谈的稍微有点不同)。首先我们应该先明白消息和事件的区别,Windows是消息驱动的操作系统,这里的消息的产生来自于某个实例化的对象上用户的操作,来自控件,菜单,或者是系统本身产生的,而事件是靠消息触发的,但这也不是绝对的。可以用一个简单的例子去解释,我这里越写越觉得自己难表达清楚,就比如这么一个例子:“某男杀人这条消息导致被枪毙这个事件”不过最重要的区别是在消息产生后并不会被直接处理,而是先插入windows系统的消息队列,然后系统判断此消息产生于哪个程序,送入此程序的消息循环,由LRSULT CALLBACK winprc(hwnd , uint,wParam,lParam)处理。而事件是操作系统处理消息的过程中反馈的结果。用户操作- 产生消息-发送系统-系统判断来源-发给相应的窗口过程或者其他Callback函数-消息处理-等待下一条消息的产生以上为消息循环整个过程。????? LRSULT CALLBACK winprc(hwnd , uint,wParam,lParam);int WINAPI WinMain(…){MSG msg;RegisterClass(…); // 注册窗口类CreateWindow(…); // 创建窗口ShowWindow(…); // 显示窗口UpdateWindow(…);While(GetMessage(msg,…)){ // 消息循环TranslateMessage(…);DispatchMessage(…);}LRSULT CALLBACK winprc(hwnd , uint,wParam,lParam);//窗口过程函数,用于映射switch语句中各个需要被处
您可能关注的文档
最近下载
- 项目一 任务三 认识餐饮设备(课件)《餐饮服务与管理》(高教版第二版)同步课堂.pptx
- 16S122图集—水加热器选用及安装.pdf
- 第12课《短文二篇——记承天寺夜游》课件++2025-2026学年八年级语文统编版上册.pptx VIP
- 《中国心理学会临床咨询心理学工作伦理守则》考试题库及答案解析(共200题).docx VIP
- 《抗病毒药和抗寄生虫药》课件.ppt
- 翼科ES500系列专用伺服驱动器用户手册.pdf
- 高等职业技术学院辅导员工作手册.pdf VIP
- JBT 7361-2007 滚动轴承 零件硬度试验方法.docx VIP
- 小学生必背古诗75首80首!家长收藏必备,附带文档打印版.pdf VIP
- 入党积极分子培养考察表1.doc VIP
文档评论(0)