zoukankan      html  css  js  c++  java
  • 好文转载:如何学习Windows编程

    原链接:https://zhuanlan.zhihu.com/p/24773204

    Godbird
    北京爱奇艺科技有限公司 客户端工程师

    有很多初入门的小朋友跟我说,他们想学“底层”的技术,因为觉得技术含量高,所以想学Windows C++开发,看着调用一个个的参数超级多,调用起来超级麻烦的Windows API,觉着很酷。于是我念头一转,就有了这篇文章,根据我多年来做Windows 客户端的经验,跟大家谈谈Windows C++,该从哪一方面入手,这不会是一个有技术深度的文章,只是偶尔会涉及到一些术语以及一些入门书籍而已,对于Windows开发的老鸟们来说,只当是看着好玩了。

    首先来谈谈最初的Windows开发。

    如果打开《Windows程序设计》这本书,关于Windows开发的来龙去脉就一目了然了。但是要注意,《Windows程序设计》是一本纯讲述Windows API的书,确切的说,这本书主要讲的是关于Windows 用户态的API,也就是User32.dll GDI32.dll这两个库文件中的函数,大部分的内容都是关于Windows最基本的窗口元素的操控方面的API,比如创建窗口,绘制窗口,关闭窗口,消息循环等等。这本书不需要你有C++方面的知识,理论上说只要你有C语言的基础就可以看懂,但是如果你连C语言的基础也没有,看这本书可能会发生一些困难,如果你学过其它一门非面向对象的语言,这本书实际上也能够勉强看懂。我在大学的时候就看了这本书,但是直到现在也没有看完,书中的某些知识,实际上在Windows开发中已经很少用到了,我个人认为是没有必要把这本书从头到位看一遍的,在看了前面几章以后,我就蠢蠢欲动,写了一些简单的程序,迅速巩固了关于这些API调用的记忆,为今后进化到Windows C++阶段打下了一个良好的基础。所以,写程序是很重要的,这个阶段,我建议大家写一些简单的程序,比如打字测速程序,自己创建一个消息循环,创建一个窗口,创建一个光标,用GDI函数输出图形及文字,这样下来,基本的Windows程序设计概念就有了,不过注意写的时候不要大段的Copy书上的代码,全部自己写,否则无助于理解各个API的含义,这个程序,因为是自己写的第一个Windows程序,所以时间限定在一个月到一个半月之内比较合适。度过这个阶段以后,Windows编程的基本概念就应该在你脑海中形成了。

    下面进入第二个阶段,也就是C++风格的Windows开发,也就是职场上需求量很大的Windows C++程序员干的事。

    这时候你需要了解一下这个老掉牙的叫做MFC的东西,MFC是啥呢,其实是一个很原始的,用代码来拼搭界面的C++库,当然,因为是C++库,所以你必须具备了一定的C++知识。不过别因为原始就小巧了它,MFC比传统的Windows SDK开发方式还是要前进了一大步的,因为不管怎么说,它总算沾了面向对象的一点边,有那么一点点面向对象的意思了,比如一个窗口,会被封装成CWnd类,里面有创建窗口的成员函数,窗口绘制的函数也被封装了进去,CWnd又会有其它的窗口派生类,比如CView啊CFrameWnd以及各类窗口控件。学了MFC,你就基本上对Windows C++开发入门了,换而言之,如果你学的还算过关的话,应该能在市场上淘到一份关于Windows C++开发的工作了。其实现在很多公司还在使用MFC这个老黄牛,虽然MFC跟现在流行的界面库的易用程度比实在是差的太远,但是MFC的界面效率高,细节操控丰富这仍然是不争的事实。

    在这个阶段上,你可以做一些简单的稍微上得了台面的程序了,比如开发一个基于IE内核的浏览器,之所以我让你开发这个程序,是因为开发IE相关的程序能学到很多跟COM有关的知识,COM也同样是Windows客户端开发人员的必备技能,它的生命力跟MFC一样的顽强,甚至有过之而无不及。

    这个阶段上,如果你对MFC足够熟悉了,还可以接触一下WTL这个轻量级的模板界面库,其实如果有了MFC的基础,WTL的学习过程是很愉快的,很多MFC中的概念,比如消息映射,在WTL中都有对应的东西,WTL更小巧,封装的更高端(模板库嘛),但是微软官方不支持,所以不像MFC在MSDN上有专门的文档。最重要的是,WTL和ATL可以结合的非常好,这样就使得在WTL上调用ATL写的COM组件或是在ATL写的COM组件中调用WTL的窗口变的简单轻松,所以,以我现在的脾气,是更加推荐大家使用WTL而非MFC的,但是毫无疑问的,WTL的学习成本更高,所以仁者见仁智者见智啦。

    接下来就该学习COM了,学习COM嘛,几本关于COM的基础理论书籍还是要看的,比如《COM技术内幕》这个本书我比较推荐,比较浅显,适合COM的初学者,另外潘爱民的《COM原理与应用》我也看过,马马虎虎也还算过得去吧,虽然感觉还是前面那本更好一点。至于那本神乎其神的《COM本质论》,我觉得不看也罢,那本书初看的时候没看几页就走神,实在是晦涩,素我直言,《COM本质论》这本书,如果你没有好的C++基础还是别看了,纯粹给自己添堵。

    等到有了COM的基础概念了,就可以看看《深入解析ATL》,ATL就是用来写COM的,虽然它也封装了一些窗口,控件,不过这本书稍微写的深了一点,大段的代码剖析,初学者看起来还是有难度的,我当初很多地方都是强迫自己看完的,看完了后,收获还是不小的。

    在你有了一定的Windows程序开发经验之后,可以看《Windows核心编程》,这本书讲的都是关于Windows内核方面的东西,比如进程啦,内核对象啦,线程啦,DLL啦,SEH啦,总之我的看法,这本书与《Windows程序设计》遥相呼应,弥补了前者的不足,大篇幅的讲述了Kernel32.dll里面的函数,这本书很多内容我都通读了好几遍,某个国内排名前三的互联网公司面试,面试官的很多问题都是这本书里的东西,所以强烈建议大家把这本书好好学习一下。

    总结了一下,看书是很重要的,但是不要忘了写代码,我得感觉,看书的时间和写代码的时间在三七开是比较好的,战争中学习战争,实践出真知,这才是最重要的。

    编辑于 2017-01-08
    Windows 开发
    C++
    Visual C++
  • 相关阅读:
    Blank page instead of the SharePoint Central Administration site
    BizTalk 2010 BAM Configure
    Use ODBA with Visio 2007
    Handling SOAP Exceptions in BizTalk Orchestrations
    BizTalk与WebMethods之间的EDI交换
    Append messages in BizTalk
    FTP protocol commands
    Using Dynamic Maps in BizTalk(From CodeProject)
    Synchronous To Asynchronous Flows Without An Orchestration的简单实现
    WSE3 and "Action for ultimate recipient is required but not present in the message."
  • 原文地址:https://www.cnblogs.com/ageane/p/winapi.html
Copyright © 2011-2022 走看看