留作自用,转自:https://www.cctry.com/thread-297374-1-1.html

0、开发环境:
操作系统:Microsoft Windows 7 Ultimate Sp1 x64
编译工具:Microsoft Visual Studio 2013 Professional 中文版(其实 VS2010、VS2012、VS2013、VS2015、VS2017 都可以的,操作基本相同)

1、简介:
之前VC驿站给大家推出了《实用C++》的新手入门教程,可以说把我们平时针对C++语言经常用到的知识点都做了讲解。不知道大家学习的怎么样?课后有没有真正的去敲代码练习。光看教程是不行的哦~

那么之前啊主要给大家讲解的是C++的基础语言,所以呢主要是在黑窗口的这种命令行控制台下操作的,跟界面没什么关联。但是作为C++新手来说肯定都是对于UI界面比较感兴趣,毕竟我也是从新手阶段过来的。写好了的软件执行起来能看到界面也很有成就感。可以激发大家学习VC++编程的积极性。所以从本节课开始给大家讲解下VC++中的界面开发技术。

2、Windows程序简介:
实际上Windows系统大家应该再熟悉不过了,Windows程序呢也主要分那么几种,例如:exe的可执行程序,dll的动态链接库程序,lib的静态库程序,sys的驱动类型程序等等。这些都可以用VC++来开发。

Exe类的程序从操作界面的使用角度来说又分成两种:
第一种就是我们之前一直使用的黑窗口的控制台下的程序,这种程序一般没有什么界面,都是使用命令行进行操作,比如:ipconfig、ping 之类的。使用系统提供的cmd控制台进行加载。入口点函数是 main。
第二种就是我们接下来要讲解的非控制台类型的程序,这种程序可以有界面,也可以没有界面。想要界面就调用创建窗口的API函数去创建个界面出来,不想要界面呢不创建就可以了。所以呢比较灵活。入口点函数是 WinMain。

3、Windows编程开发相关概念:
Windows API:Windows操作系统应用程序接口(Windows API),有非正式的简称法为WinAPI,是微软对于Windows操作系统中可用的核心应用程序编程接口的称法。它被设计为各种语言的程序调用,也是应用软件与Windows系统最直接的交互方式。大多数驱动程序需要对Windows系统更底层次访问接口,由所用版本的Windows的Native API来提供接口。
Windows有一个软件开发包(SDK, software development kit)提供相应的文档和工具,以使程序员开发使用Windows API的软件和利用Windows技术。

说了这么多,对于新手来说可能还是不太理解,我用通俗一点的话来解释下!
有人会问了我都学完了C++,难道还不能编写Windows系统下的应用程序吗?我还得学其他的东西吗?答案是:能,但是只能编写一些简单的控制台下的黑窗口程序。或者说只能调用C++基本语言内部的函数。

如果你要创建一个窗口,如果你要创建一个按钮,如果你要创建一个菜单,如果你要创建一个进程,如果你要做一个带界面的任务管理器,以上这些单纯使用C++语言能做到吗?答案是:肯定做不到了。
那么如何来做呢,就是要调用windows系统提供给我们的API接口,大家可以把API接口看作是系统提供给我们的工具,使用这些工具就可以做出我们想要的东西来。再举个现实生活中的例子,你学会了C++语言就好比你有了一些简单的工具,C++语言就好比是螺丝刀,扳手,钳子等等,用这些工具你可以做些简单的事情,可如果要让你造出一台汽车,你单纯使用螺丝刀、扳手一类的工具可能造出来吗?答案是:不可能。所以你还需要制造汽车的更高级的东西,比如:车床、工厂、车间等等大型的机械化设备,这些设备是制造汽车的必须品,API就好比这些设备。所以你要在windows系统上开发出更高级的软件,那么就必须调用其系统提供的API接口。这么打比方大家明白了吗?

4、基本的Win32程序:
接下来就教大家如何创建一个Win32类型的Exe程序,具体见视频教程演示。。。
怎么样大家看到了吧,代码量不少,而且操作来说比较复杂,又是初始化,又是注册窗口类,又是窗口函数什么的,一堆东西。更重要的是我们使用这个模版工程继续开发的话会越来越麻烦,比如添加个基本的按钮响应函数,这个还算是简单的了,当对一些比较复杂的控件操作时就更复杂了,比如:ListCtrl 高级列表控件,TreeCtrl 树形控件等等。

另外,当前工程模版默认创建出来的这个窗口不是对话框,所以是没办法进行拖拽控件的,对于小白来说想快速的拖拽控件做出一个窗口看来是有点麻烦了。
实际上Win32类型的工程就是调用基本的系统提供的API函数来写程序的。

5、解决方案:
既然Win32类型的工程这么麻烦,要记的东西也这么多,以后开发起来岂不是很费事儿?这个微软早想到了,其他很多公司也想到了。本身C++就是一门面相对象的,可封装的语言,所以能不能对系统提供的API函数以及复杂的开发流程进行一下封装呢,这样我们以后使用起来就能方便不少?答案是:当然可以了。所以现在市面上有很多封装好的C++库,或者说框架,比如:MFC、QT,这两个算是比较有名的,而且他们两个不仅仅是界面库,还包括很多其他的操作,比如文件管理,字符串操作,网络管理,多线程,数据库操作,注册表操作等等吧,很多方面。

那么他们两个有什么区别,我们该选用哪个呢?其实这个话题从古至今很多人在讨论。个人观点,感觉两个框架都有优缺点,大家根据自己的需要进行选择:

MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个(也是微软产品的唯一一个)应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

优点:MFC说白了就是微软自家的东西,所以VC自带MFC工程向导,VC对MFC支持的也很好。对于界面方面实现起来简单,易于上手,能快速的制作简单的UI界面,执行效率高,生成的EXE或者其他程序可以直接在Windows系统上执行,生成的文件体积也比较小;

缺点:这东西对于新手来说学起来还是有点复杂,因为是对WinApi的封装,里面用到了大量的宏,所以有时候是基于面向过程的,有时候是基于面向对象的,内部也是使用基于Windows系统的消息机制,所以学起来不是那么容易,学习周期长。如果要做成比较美观的界面,类似我们使用的QQ、迅雷、YY等软件的UI界面的话,使用MFC实现起来就比较费时费力,做起来比较麻烦倒不是说做不了,只是比较费劲而已。另外,因为是微软自己的东西,所以不能跨平台,在 Linux、Mac 系统上是别想用了。

总结:所以MFC适合开发对界面美化要求不高软件。

Qt:是一个跨平台的C++应用程序开发框架。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,比如控制台工具和服务器。Qt使用于OPIE、Skype、VLC media player、Adobe Photoshop Elements、VirtualBox与Mathematica以及被Autodesk、欧洲空间局、梦工厂、Google、HP、KDE、卢卡斯影业、西门子公司、沃尔沃集团, 华特迪士尼动画制作公司、三星集团、飞利浦、Panasonic所使用。

它是Digia公司的产品。Qt使用标准的C++和特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏。通过语言绑定,其他的编程语言也可以使用Qt。
Qt是自由且开放源代码的软件,在GNU宽通用公共许可证(LGPL)条款下发布。所有版本都支持广泛的编译器,包括GCC的C++编译器和Visual Studio。

优点:Qt是一个开源的项目,可以跨平台使用,在 Linux、Mac 系统下一样可以使用。使用完全面向对象的封装机制,内部使用信号与槽机制,易于上手。开发文档丰富,支持VS插件的形式进行开发。可以制作漂亮精美的软件UI界面。省时省力。

缺点:Qt有点过度封装,而且体积也稍大,执行效率没有MFC高,程序分发打包的时候需要将Qt的核心DLL一起随程序打包,不然程序跑步起来。当然也可以用静态库的方式编译,默认只生成一个Exe文件,但这样的话程序的体积会变的很大,不管怎么说Qt生成的文件在分发携带方面的方便性上赶不上Windows的原生程序或者MFC的程序。当然如果是类似YY这种产品级的软件倒也无所谓多带几个DLL了。

总结:所以Qt适合开发对界面美化要求较高的软件。

MFC 和 QT 就好比 手动档车与自动档车一样,前者开发软件太累,但可控性更加高些。

综合以上吧,毕竟我们不是开发什么大型的软件产品,但也为了让大家以后转型方便,所以本套教程界面UI方面使用MFC来开发,除界面外的其他逻辑部分我们全用 原生CPP + SDK API 的方式来做。
这种方式目前来说我想是最好的。同时呢,大家不要着急,以后我们VC驿站会给大家出几套Qt方面的教程,让想学Qt方面的学员也有机会!

从下节课开始,我们就逐一讲解MFC控件工具箱中提供的基础的那15个控件,以及每个控件如何进行美化,如何使用开源类进行更多功能的操作等等,大家好好学习吧~

6、相关控件:
Button 按钮控件
CheckBox 复选框控件
Edit 编辑框控件
ComboBox 下拉控件
ListBox 列表控件
GroupBox 分组控件
Radio Button 单选框控件
Static Text 静态文本框控件
Picture Control 图像控件
Slider Control 滑块控件
Spin Control 数值调节钮控件
Progress Control 进度条控件
List Control 高级列表控件
Tree Control 树形控件
Tab Control 标签控件

VC编程--玩转控件(Windows编程简介)相关推荐

  1. VB.net数据库编程中DataGrid控件的使用技巧

    VB.net数据库编程中DataGrid控件的使用技巧 如何用同一个DataGrid显示不同的数据表:如何用DataGrid显示主表/明细表的内容:如何用DataGrid分页显示或编辑数据表的记录.这 ...

  2. WPF编程,将控件所呈现的内容保存成图像的一种方法。

    WPF编程,将控件所呈现的内容保存成图像的一种方法. 原文:WPF编程,将控件所呈现的内容保存成图像的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.ne ...

  3. android常用控件实验报告,常用控件的编程实验报告

    实验二 常用控件的编程 一.实验目的和要求 (1)掌握窗口下拉列表框.选择钮.组合框.多行编辑框等常用控件的基本使用方法和编程方法: (2)掌握窗口控件的齐整性操纵方法以及Tab顺序的设置: (3)掌 ...

  4. Silverlight玩转控件(二)——Canvas布局

    在接下来的几篇文章中,我将来介绍Silverlight相关的布局知识. 在Silverlight中,布局主要有三种方式: 1. Cavas 2. StackPanel 3. Grid 在传统的ASP. ...

  5. winform 异步弹窗窗体_玩转控件:重写/重绘Dev中MessageBox弹窗控件

    很久没有更新博客了,本想着直接发一篇<手撕ERP>系列,从控件重写.重绘,到框架搭建,再到部分模块实现+业务的.但是每次动手的时候,都觉得难以下手.直接从数据库设计开始吧,模块设计还没定下 ...

  6. 玩转控件:封装Dev的LabelControl和TextEdit

    缘由 俗话说的好:"工欲善其事必先利其器",作为软件攻城狮也是同样道理,攻城狮开发的软件目的是简化客户的操作,让客户动动手指就可以完成很多事情,减少人力成本.这也是系统/软件存在的 ...

  7. 玩转控件:重写/重绘Dev中MessageBox弹窗控件

    很久没有更新博客了,本想着直接发一篇<手撕ERP>系列,从控件重写.重绘,到框架搭建,再到部分模块实现+业务的.但是每次动手的时候,都觉得难以下手.直接从数据库设计开始吧,模块设计还没定下 ...

  8. 玩转控件:对Dev的GridControl控件扩展

    缘由 一切实现来源于需求,目的在于不盲目造轮子,有小伙伴儿在看了<玩转控件:对Dev中GridControl控件的封装和扩展>文章后,私信作者说,因公司业务逻辑比较复杂,展示字段比较多,尤 ...

  9. 如何添加媒体控件Windows Media Player到工具箱中

    如何添加媒体控件Windows Media Player到工具箱中 在工具栏 右击>选择项 选择COM组件 勾选Windows Media Player即可

  10. VC MFC按钮(CButton)控件

    VC MFC按钮(CButton)控件 2012年11月11日 19:15   作者:TCEO   分类:技术文章   浏览:4,298   按钮控件 1如何在按钮控件上显示图片 首先确定你要显示在按 ...

最新文章

  1. 【Boost】noncopyable:不可拷贝
  2. python中str的index什么意思_python中index的用法是什么
  3. Php的基本语法学习
  4. Linux Increase The Maximum Number Of Open Files / File Descriptors (FD)
  5. MPI多机器实现并行计算
  6. Python实例讲解 -- wxpython 基本的控件 (按钮)
  7. 正在中止线程 iis_Zephyr线程生命周期及状态
  8. 电脑dns_女生也能学会的修电脑技巧
  9. Python win32com模块安装
  10. class不生效 weblogic_weblogic部署常见问题
  11. C语言stdio头文件常见的输入输出库函数
  12. php文件上传实验总结,php文件上传总结 - osc_jjc36t9p的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. 关于阿里云短信验证服务完整的教程
  14. CAD快捷键命令------画矩形
  15. 天心阁吉他神秘人专访
  16. CPU执行程序的原理(简化过程)
  17. 红米ac2100有ipv6吗_Redmi路由器AC2100开箱:六天线简单直接,功能丰富对玩家友好...
  18. project子项目之间任务关联_任务关联的类型(Project)
  19. 外媒:谷歌称继续推动华为禁令可能带来美国国家安全风险
  20. 百度地图锚点居中显示

热门文章

  1. jmeter参数化测试-姓名生成
  2. android studio 中要在app名称中添加特殊符号
  3. 一峰说:SpringCloud的基础了解和使用
  4. 操作系统动态分区分配方式的模拟实现(分配与回收)C++
  5. Excel宏的基本逻辑语句
  6. 八大数据结构-数组 栈 队列 链表 树 散列表 堆 图
  7. c++ 圆整(取整)相关函数大全(rint lrint llrint round ceil floor trunc)
  8. 腾讯云人脸识别 活体检测 人员库管理
  9. 英尺英寸和厘米的换算_C语言中关于英尺、英寸、厘米的换算
  10. PS去掉图片上反光的操作流程