非常早就想写关于C++ UI开发的一系列博文,博客专栏刚审核通过,就立即開始刷博文,不能辜负自己的一番热血,我并非写界面的高手,仅仅想通过写博文提高我自己的技术积累,也顺便帮助大家解决界面开发的瓶颈。

能来到这里看我写文章,

第一说明你是windows下开发的程序猿!

第二你对美丽软件界面开发感兴趣!

第三也许你也像我当初一样对C++软件界面开发 无所适从!也许我写的不专业,可是我仅仅想让利用C++编写client界面的新手程序猿们对C++界面开发没有误区 。

我是从windows开发出身,深知当我们想要去用C++开发界面的时候是多么的操蛋,回头看看我们熟悉的MFC win32SDK

,做出来的界面咋就那么难看,对照网上的那些绚丽软件我们的软件顿时显得档次非常低了。做软件界面技术并非多么高深,也并非非常难,仅仅要找对路子非常easy上手。尽管说的看似简单,可是写起来确实非常繁琐复杂,同一时候 须要对windows消息了如执掌才干写好C++ UI。

首先说说写界面的几种方式,在windows以下:

第一种界面开发方式

基于windows控件的自绘,相信非常多程序猿都听过MFC自绘等等术语,确实写起来不好写,实际上是MFC不好理解的缘故,真正的术语应该叫做win32界面自绘更能防止新手走进误区,由于MFC就是封装的win32 API,所以MFC界面自绘 就是win32界面自绘.原理大概就是我们拦截windows绘制界面的消息,然后我们取代他来绘制界面,从而实现我们的自己定义界面。非常多皮肤库通过Hook技术,拦截了windows的UI消息,然后实现了总体UI风格的切换,比如SKinMagic这个皮肤库。这样的方式适合写库的人来玩,难度相对高,要对windows消息了如指掌。只是没关系 我会在兴许文章分析windows的全部控件的实现 以及消息处理 和自绘。

另外一种界面开发方式

基于DirectUI技术的界面,什么是DirectUI技术呢?我们知道在MFC中我们的软件界面都有句柄 ,句柄是一种系统资源。

可是基于DirectUI技术的界面组件是没有句柄的,我们须要自己封装大量的鼠标消息  等等取代默认windows控件的消息。

这么说吧 增加你要用DirectUI技术绘制一个Button  那么你就须要自己实现  比如系统Button的一些状态.比方鼠标点击           Hover  UnHover  Disable 时候 button的样子 以及消息的处理. 由于如今你不是在用windows默认的消息机制来实现界面。一切消息你自己封装。

DirectUI技术尽管是 无句柄绘制组件,可是 全部DirectUI界面必须有一个承载窗体作为 渲染窗体来使用,由于你画图须要设备上下文嘛。

市面上有非常多能够取代windows下繁琐的界面开发,兴许会专门解说怎样在以下编写界面

Qt的GUI 以及QML都能够高速的开发软件界面,可是有一个缺点是软件包可能会有些大,只是开发效率的确是高    这是本人的擅长之处后期会具体介绍QML开发跨平台界面UI

DUILIB 国内的界面库 比方金山 百度的一些产品中就用到了此库,除了有些小BUG之外 没啥太大的缺点   后期会在文章中介绍

Skin++一个收费的界面库,因为收费 技术不共享不适合我们学习使用 直接X掉

关于界面开发会遵循例如以下顺序进行:

1、 一步一步 学习 Win32 SDK 以及MFC中通过 自绘实现界面DIY  系列

1.1   自绘Buttonbutton
1.2   自绘Dialog
1.3  自绘菜单
1.4  自绘输入框
1.5 自绘ComboBox
1.6 自绘ListView
1.7 自绘Tab
1.8 自绘ScrollBar
1.9 通过HooK实现界面自绘

2、DirectUI方式  基于 GDI+开发  自己定义软件界面组件 系列

2.1 GDI+使用入门
2.2 GDI+ 实现DirectUI系列

3、Qt下的界面开发系列

·  4、DUILIB高速开发界面系列

以上是我列出的我想要去写的东西,写博文事实上非常枯燥无味,工作繁忙不能每天更新 可是至少保证每周更新两到三次博文,可能写的技术水平也不入大牛们的眼,可是对于新手来说 能帮助高速进入界面开发的门槛 那么就足够了。~

附上近期写的測试界面





windows下VC界面 DIY系列1----写给想要写界面的C++程序猿的话的更多相关文章

  1. Windows 下VC++6.0制作、使用动态库和静态库

    Windows 下VC++6.0制作.使用动态库和静态库 一.VC++6.0制作.使用静态库 静态库制作 1.如图一在VC++6.0中new一个的为win32 static library工程并新建一 ...

  2. Windows下USB磁盘开发系列二:枚举系统中所有USB设备

    上篇 <Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>介绍了很简单的获取系统U盘盘符的办法,现在介绍下如何枚举系统中所有USB设备(不光是U盘). 主要调用的API如下: 1 ...

  3. Windows下USB磁盘开发系列三:枚举系统中U盘、并获取其设备信息

    前面我们介绍了枚举系统中的U盘盘符(见<Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>).以及获取USB设备的信息(见<Windows下USB磁盘开发系列二:枚举系统中 ...

  4. windows下vc编译和debug nginx

    总体来说,各个步骤以及版本参考官方文档http://nginx.org/en/docs/howto_build_on_win32.html一点没错,有些细节没说清楚. To build nginx: ...

  5. Cocos2d-x程序Windows下VC中文乱码的解决(用MultiByteToWideChar进行转换,VC2010有非常厉害的execution_character_set)

    Cocos2d-x默认字符串常量编码都是UTF8的,而Windows中的VC默认都是跟系统相同,比如简体Windows是GB2312或者GBK.繁体就是BIG5编码.而我们大多数中国人用VC编译出来的 ...

  6. windows下部署.netcore+docker系列一(安装linux (ubuntu18.4))

    1 下载 虚拟机和 linux 系统 版本是 ubuntu 链接:https://pan.baidu.com/s/1jTxdysoyOhSWD-Ea-7JIbg 提取码:iiad 2  首先要安装 虚 ...

  7. windows下 cmd 界面的替代者 cmder 推荐!

    介绍 http://cmder.net/ Portable console emulator for Windows Cmder is a software package created out o ...

  8. windows下部署.netcore+docker系列四 (部署程序,重点就要来了)

    前面的都是为这章做准备,加油把骚年们 PS:C# 项目可以按照流程一步步来,java 偶然其他的可以找下其他的网上资源 1.在 VS2019中 添加docker 支持 (其实也就是追加一个Docker ...

  9. windows下部署.netcore+docker系列三 (unbuntu 18.4 下安装ftp)

    // 先更新下系统sudo apt-get update//安装ftpsudo apt-get install vsftpd// 启动 服务sudo service vsftpd start//ftp ...

随机推荐

  1. oracle varchar2 和varchar 区别

    今天,往ORACLE一个表的VACHAR2(20)字段中插入七个汉字,提示错误:插入的值太大. 改成插入六个汉字,又可以. 一直以来,都以为一个汉字占两个字节.觉得非常奇怪. 用length().le ...

  2. Python眼睛护士改进版

    添加了设定从(0,0)显示:self.root.geometry('1000x200+0+0')其实主要是两个0.那个1000和200是没用的,因为已经设定了minsize. 添加了窗口置顶:self ...

  3. deinstall oracle 11g on linux

    deinstall oracle 11g on linux   From 11gR2, oracle provide us an deinstall tool. With that now we ca ...

  4. [WPF] 使用Grid与GridSplitter排版布局

    原文:[WPF] 使用Grid与GridSplitter排版布局 前言 在開發應用程式時,一個很重要的工作項目就是設計使用者介面的排版布局.WPF中所提供的Grid控制項,讓開發人員擁有將版面分割為欄 ...

  5. dede 标签

     ◆织梦内容管理系统模板标签代码参考 [Arclist 标记] 这个标记是DedeCms最常用的一个标记,也叫自由列表标记,其中 hotart.coolart.likeart.artlist.imgl ...

  6. ECSHOP分类页面筛选功能(按分类下子分类和品牌筛选)

    其实分类页面里面本来就有相关的品牌.属性.分类的筛选功能在category.php和模板加上相应的功能即可 1.读出当前分类的所有下级分类 $chlidren_category = $GLOBALS[ ...

  7. java名词,关键字

    抽象类:规定一个或多个抽象方法的类别本身必须定义为abstract,抽象类只是用来派生子类,而不能用它来创建对象. final类:又称“最终类”,它只能用来创建对象,而不能被继承,与抽象类刚好相反,而 ...

  8. 高性能 TCP &amp; UDP 通信框架 HP-Socket v3.2.2 正式公布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...

  9. 使用JavaMail发送和接收电子邮件

    一. 为什么要学习JavaMail 为什么要学习JavaMail开发? 如今非常多WEB应用在开发时都须要集成邮件发送功能.比如: 1. 给新注冊的用户自己主动发送一封包括其注冊信息的欢迎E-Mail ...

  10. Google 开源项目的风格指南

    谷歌C++代码风格指南.农业所需的代码.更难得的是不FQ,决定性的最爱!! . http://zh-google-styleguide.readthedocs.org/en/latest/google ...