如何学习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里面的函数,这本书很多内容我都通读了好几遍,某个国内排名前三的互联网公司面试,面试官的很多问题都是这本书里的东西,所以强烈建议大家把这本书好好学习一下。

总结了一下,看书是很重要的,但是不要忘了写代码,我得感觉,看书的时间和写代码的时间在三七开是比较好的,战争中学习战争,实践出真知,这才是最重要的。
...全文
10628 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)
我将带领大家来系统学习Windows的窗口编程,包括消息、窗口、GDI绘图、游戏开发等。本课程比较基础,非常适合初学者入门,读者可以边学习边实践。具体的章节目录和课程内容如下所示:---------------------------------------------Windows游戏编程系列之1:GUI界面编程及游戏入门实战1、Windows创建第一个窗口 WinMain入口函数 5进行Windows编程的调试手法 6窗口从哪里来? 7窗口编程的步骤 7窗口编程需要的主要结构 8窗口编程需要的主要API 92、Windows的窗口过程与消息机制 如何留住窗口? 121)Windows的消息与消息循环 142)消息处理函数与常用消息 17)Windows的窗口过程函数 19 3、GDI编程之设备上下文 1)GDI的通用编程框架 222)GDI的绘图步骤 253)GDI获取设备句柄 254、GDI编程之绘制几何图形 画点、线 28颜色COLORREF 29矩形 29画圆、饼图、弦图 305、GDI编程之自定义画笔画刷画笔简介 32画刷简介 33画笔案例 33画刷案例 346、GDI编程之绘制文字 DrawText函数 35TextOut 函数 (wingdi.h) 36CreateFont函数 37绘制文本案例 377、GDI编程之绘制位图 位图简介 381)在资源中添加位图资源 392)从资源中加载位图: LoadBitmap 393)创建一个与当前DC相匹配的DC(内存DC) 394)将bitmap放入匹配的DC中:SelectObject 405)成像(1:1 比例 ) 406)取出位图 407)释放位图 418)释放匹配的DC 41绘制位图案例 41   8、Windows鼠标键盘消息 一、键盘消息 421、键盘消息 422、消息参数: 423、消息的使用: 424、键盘消息的案例代码 43二、鼠标消息 441、基本鼠标消息 442、双击消息 443、滚轮消息 454、不响应双击消息 45 9、Windows定时器消息 定时器消息介绍 47创建定时器 47关闭定时器 47定时器消息案例代码 4810、GDI游戏之跳舞动画 11、GDI游戏之走路动画 12、GDI贪吃蛇游戏实战  
内容简介 《C#编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用C#进行程序开发的各种技术和技巧。全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括做好C#程序开发前期准备、掌握c#语言基础之数据类型与变量、领略运算符和表达式带给我们的神奇、巧用流程控制语句、算法、字符串、数组、步入面向对象程序设计的殿堂、使用Windows窗体搭建交互式图形界面、你所必须知道的Windows控件、掌握能够辅助程序开发的Windows控件、数据库管理系统开发必备、LINQ数据访问技术、程序调试与错误处理、打包部署等内容;第2篇为范例演练篇,主要包括基础应用相关、数据库开发相关、图形图像及多媒体应用、WPF图形化显示系统等相关的范例;第3篇为项目实战篇,主要包括明日快递单打印系统、QQ自动登录器、雷速网络下载专家、编程词典销售分析系统等4个小型项目;第4篇为商业系统篇,主要介绍一个大型的商业项目,即企业ERP管理系统(C/S架构)。 《C#编程宝典(十年典藏版)》附有配套DVD光盘,光盘中提供了书中全部实例和项目的源代码,这些源代码全部经过精心调试,能够在Windows XP、Windows Server 2003以及Windows 7操作系统下编译和运行。 《C#编程宝典(十年典藏版)》适用于C#的初学者、编程爱好者,同时也可以作为培训机构、大中专院校老师和学生的学习参考用书。

1,649

社区成员

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

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