如何学习Windows编程

oldmanzhao 2013-07-20 02:04:10
加精
有很多初入门的小朋友跟我说,他们想学“底层”的技术,因为觉得技术含量高,所以想学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里面的函数,这本书很多内容我都通读了好几遍,某个国内排名前三的互联网公司面试,面试官的很多问题都是这本书里的东西,所以强烈建议大家把这本书好好学习一下。

总结了一下,看书是很重要的,但是不要忘了写代码,我得感觉,看书的时间和写代码的时间在三七开是比较好的,战争中学习战争,实践出真知,这才是最重要的。
...全文
10625 83 打赏 收藏 转发到动态 举报
写回复
用AI写文章
83 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2014-11-28
  • 打赏
  • 举报
回复
战争学习战争
燕子lovinglife 2014-10-20
  • 打赏
  • 举报
回复
会思考的草 2014-10-17
  • 打赏
  • 举报
回复
Programming Windows翻一下了解一下过往历史即可。Windows开发还是Windows RT、WPF吧。MFC这种我建议扔到故纸堆里去。
谁学逆向工程 2014-09-30
  • 打赏
  • 举报
回复
学习COM真是一场噩梦,学不会的东西
feeginwu 2014-09-30
  • 打赏
  • 举报
回复
赞一个,C++巩固了一段时间,现在看MFC完全无压力。
yangxuefeng09 2014-05-27
  • 打赏
  • 举报
回复
处处留心 2014-04-21
  • 打赏
  • 举报
回复
引用 50 楼 mmlinux 的回复:
[quote=引用 49 楼 phonio 的回复:] 搞毛,之前学的一直是linux下的编程,工作不好找现在做的事MFC,徘徊中的纠结很郁闷!
内牛满面啊,哥们也是从Linux编程转到VC的,最近也很纠结,感觉职业方向不知道怎么弄。[/quote] 我学VC的,我怎么感觉linux比windows好找工作呢?
chendilincd 2014-04-21
  • 打赏
  • 举报
回复
非常感谢楼主 赞
bnuside 2014-04-21
  • 打赏
  • 举报
回复
step1:建立目标 step2:获取路线图 步骤2在lz的帖子中找到了答案。
  • 打赏
  • 举报
回复
先给自己一个月,看完上面的书,看不会的,也不要继续下去了。 找个项目,彻底先看看 仿照这个项目,实现出来,不要照抄,纯手写,不明白的翻书,找google、百度,来bbs提问 再回去看上面的书,一定有不一样的收获 这么三遍下去,顶多一年。你即使不是计算机科班,也不在他们的实力之下(当然不能还不能和大牛相比)。
快活林 2014-04-16
  • 打赏
  • 举报
回复
希望多多看到此类贴子。感谢楼主~~~~~~
村南菜园 2014-03-22
  • 打赏
  • 举报
回复
路过……顶一下
ojc520520 2014-03-21
  • 打赏
  • 举报
回复
路过............................................
123de7 2014-03-20
  • 打赏
  • 举报
回复
学习了 ,前辈!!!
听风看云 2014-03-20
  • 打赏
  • 举报
回复
mark下,谢谢lz
jeffkuang_2005 2014-02-25
  • 打赏
  • 举报
回复
学习了,谢楼主。
goodyang2012 2014-02-18
  • 打赏
  • 举报
回复
感谢楼主,一直有些不清楚,大概我现在的工作就需要这么学。 小弟菜鸟一枚,大学里MFC只是入门阶段,可工作一开始就遇到了WTL、COM,WTL没有好的学习资料。 最近在恶补中。。。
逆龙在野 2014-02-06
  • 打赏
  • 举报
回复
学过C,学过C++,学过MFC,学过JAVA……大学的课程就是这么安排的,然后我现在纯不会编程了。如何再学啊?请指导!
rushpixy 2014-01-29
  • 打赏
  • 举报
回复
linux 绝对比mfc 好找,现在服务器那么多。 平时没项目, 自己写小东西的时候,考虑今后的复用, 做封装, 专门搞一个自己的 include
cdcjk 2014-01-28
  • 打赏
  • 举报
回复
感谢前辈指导!写的很好
加载更多回复(62)

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧