项目组最近在全力开发Win平台客户端项目,虽然我是移动端开发人员,但作为一名开发人员不应该为开发平台限制工作能力,遂用了点时间在一定程度上参与了Win端客户端的开发工作。

为什么是WTL

项目是toB的控制端软件,WTL程序包小,仅有一个EXE文件,对不同版本操作系统兼容性好,B端客户还用XP的不在少数,发布与使用的便捷性强。

为什么写这篇文章

WTL是基于模板对窗口封装,接近系统底层,灵活度高,只是由于资料匮乏开发上手比较困难,关于WTL的渊源我就不介绍了,重要的是,如果你在网络上搜索WTL的开资料,只能找到各种各样的广告以及WTL for MFC Programmers这篇文章的翻译版本,如果你没有MFC基础,看起来将有一定的困难,而像我这样没有C++基础,则更加头疼。作为IOS我C语言基础还行,Objective-C也使用了许多与C++类似的语法因此我大概用了一周时间学习C++和一周时间熟悉WTL最基本的框架使用以及几天时间了解公司项目框架构成后,上手并完成了一些模块的开发工作。这篇文章当然不足以让你成为WTL项目负责人,但是该应能帮助你顺利的上手。

我的博客会教给你什么

利用WTL进行Win窗口界面程序开发主要是UI部分内容,主要有以下几个部分

  1. 环境配置
  2. 创建第一个窗口
  3. 自定义绘图
  4. 基础控件:CButton CEdit CScrollerBar
  5. 动态及使用资源文件页面布局
  6. 制作自定义控件
  7. WTL扩展增强-DDX
  8. STL基础(施工中)
  9. 控件综合(施工中)

你需要提前准备什么?

需要先学好C++吗?需要先看一看MFC吗?都不需要,但是你至少需要:
1.有C语言基础。
2.理解面向对象的程序开发,不论是C++还是JAVA,OC或者SWIFT等其他面向对象的开发语言,理解OO即可。
3.如果你完全没有C++基础,也可以照着我的代码一步步做,关于C++面向对象的特性例如多继承,模板编程等,我也会在到的地方做出简单直观的解释,C++开发的其他资料比较详实如果有理解不了的内容,百度一下或者翻阅C++ PP。
4.如果你有一些客户端开发基础IOS/安卓,会有一些帮助。
5.如果你是MFC开发人员可以直接看WTL for MFC Programmers。

更重要的资料

作为一篇以引入为目的的教程,我不会过多的介绍Windows系统的功能以及所有各种复杂的控件
如果你需要信息更多 微软的官方文档是最佳参考资料
https://docs.microsoft.com/en-us/cpp/mfc/reference/mfc-classes?view=vs-2019
WTL基于ATL,ATL中的类大部分与MFC通用,因此官方的MFC 类文档是参考和学习价值极高的 某度甚至检索到一大堆广告 都不会把你引向官方文档
这里是WTL的下载地址
https://sourceforge.net/projects/wtl/
WTL项目中也带有一些例程,可以参考。

正式开始教程

环境搭建

  1. 下载安装VS。我使用的是Visual Studio2015 vs的版本对WTL影响不大,默认配置即可。

  2. 下载WTL,并取出include文件夹,这就是项目需要的WTL的全部文件

  3. 在VS中创建一个C++空项目

  4. 在项目中添加对WTL的引用

  5. 创建Main.cpp文件和stdafx.h文件。并分别写入以下内容

//stdfax.h:
#define STRICT
#define WIN32_LEAN_AND_MEAN
//#define _WTL_USE_CSTRING
#include <atlbase.h>
#include <atlstr.h>
#include <atlapp.h>
extern CAppModule _Module;
#define _WTL_NO_CSTRING
#include <atlwin.h>
#include <atlmisc.h>
#include <atlcrack.h>
#include <atlframe.h>
#include <atlctrls.h>
#include <atldlgs.h>
#include <atlwin.h>
// main.cpp:
#include "stdafx.h"
CAppModule _Module;
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{_Module.Init(NULL, hInstance);MSG msg;while (GetMessage(&msg, NULL, 0, 0) > 0){TranslateMessage(&msg);DispatchMessage(&msg);}_Module.Term();return msg.wParam;
}

这些基本是固定写法。stdfax.h作为公共头文件,引入需要的WTL文件,由于include是将对应文件的代码复制到当前文件中因此要注意如果你不知道怎么回事,就不要改变引用顺序 ,包括其中插入的宏命令位置。
Main.CPP是程序入口。CAppModule _Module;是保存主线程ID和消息循环的实例。

while (GetMessage(&msg, NULL, 0, 0) > 0){TranslateMessage(&msg);DispatchMessage(&msg);}

这个循环是主消息循环,控制着应用的生命周期。Win程序的运行依赖于消息机制。边用便了解即可。此处只要知道走入这一行 程序便开始在消息循环中执行,存活。因此要在它之前插入操作入口。
程序的基本运行环境到这里就搭建完成了。WTL其实是一套对WinAPI界面描述的封装,可以非常轻松的扩展或引入到其他项目中。

从零开始的WTL入门教程(1) WTL的简介,环境搭建相关推荐

  1. Hadoop学习笔记——入门教程(虚拟机安装LinuxHadoop环境搭建配置)

    文章目录 一.Hadoop安装配置文档及注意事项 二.Hadoop概述 2.1.Hadoop是什么 2.2.Hadoop的发展历史 2.3.Hadoop三大发行版本 2.3.1 Apache Hado ...

  2. Unix/Linux环境C编程入门教程(16) LinuxMint CCPP开发环境搭建

    1. Linux Mint由Linux Mint Team团队于2006年开始发行,是一份基于Debian和Ubuntu的Linux发行版.其目标是提供一种更完整的即刻可用体验,这包括提供浏览器插件. ...

  3. 从零开始的unity3d入门教程(一)----环境配置

    从零开始的unity3d入门教程(一)----环境配置 文章目录 从零开始的unity3d入门教程(一)----环境配置 一.unity3d的安装 1.注册Unity账户 2.进入Unity3d中文官 ...

  4. 从零开始的unity3d入门教程(五)---- 基于Vuforia的AR项目

    从零开始的unity3d入门教程(五)---- 基于Vuforia的AR项目 文章目录 从零开始的unity3d入门教程(五)---- 基于Vuforia的AR项目 一.前言 二.Unity与VS环境 ...

  5. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图 ...

  6. Microchip PIC系列8位单片机入门教程(一)开发环境建立

    Microchip PIC系列8位单片机入门教程(一)开发环境建立 作者:Greg 第一节 开发环境建立条件 软件: (1)MPLAB X:集成开发环境下载地址:https://www.microch ...

  7. CAA教程——CATIA二次开发环境搭建

    CAA教程--CATIA二次开发环境搭建 前言 开发环境搭建所需资源 安装注意事项 安装完成后的一些操作 测试程序的运行效果 CATIA帮助文档的设置 VS里利用CATIA帮助文档的查询接口功能 编译 ...

  8. 【官方搭建入门】JEEWX 捷微开发环境搭建必读

    [官方搭建入门]JEEWX 捷微开发环境搭建必读 下载地址: http://git.oschina.net/jeecg/jeewx 1. 标准开发环境:eclipse + maven + jdk7 + ...

  9. Physx3.4学习随笔(入门篇1)-SDK与环境搭建

    Physx3.4学习随笔(入门篇1)-SDK与环境搭建 SDK与环境搭建 SDK获取 PhysX Visual Debugger 执行SnippetHelloworld SDK与环境搭建 本文主要介绍 ...

  10. 树莓派4b入门之开发RFID系统—简介、搭建MFRC522-SPI环境

    树莓派4b入门之开发RFID系统-简介.搭建MFRC522-SPI环境 一.系统简介 二.模块连接 1.引脚定义 2.接口对应关系 三.搭建接口环境 1.开启SPI 2.模块功能设计 3.安装SPI ...

最新文章

  1. layui中监听select下拉框改变事件
  2. [原创]微软拼音输入法2007(含64位版)
  3. Distributed Systems笔记-Cryptographic Protocols
  4. activity直接销毁_Android -- Activity的销毁和重建
  5. 一步步编写操作系统 07 开机启动bios
  6. 国防科大提出基于可变形三维卷积(D3Dnet)的视频超分辨,代码已开源
  7. 安装sql时挂起的解决方法
  8. Cissp全过程(简介到考试后)
  9. [译]Chapter 1 - An Introduction to ASP.NET MVC(2)
  10. mybatis-plus中的分页查询
  11. 论PMP和PRINCE2的价值?
  12. win10系统开启扫描仪服务器,win10怎么安装扫描仪 win10扫描仪怎么扫描
  13. Web前端之CSS层叠样式表相关案例
  14. 【Python绘图】pyecharts绘制南丁格尔玫瑰图
  15. 笔记本高分屏字体模糊_高分屏软件字体模糊的参考解决办法
  16. eSDK 华为ICT能力开放平台
  17. python下载arcgis地图_使用下载器下载适用于arcgis的离线地图切片
  18. python比java好学吗-java为什么比python快?
  19. Janis ST-500 系列探针台
  20. html中文本旋转90度,css如何使文字方向转90度

热门文章

  1. 【noi.ac #1997】A. 制胡窜
  2. 判断手机是否有虚拟键盘
  3. 服务器ip显示静态表示什么,静态ip是什么意思 什么是静态IP
  4. PSP实机用虚拟机wifi网卡联机
  5. Android 检查权限总是 PERMISSION_GRANTED
  6. 完全免费:鲜为人知的桌面正文内容检索工具(支持epub/mobi/azw3/markdown)
  7. android音乐视频播放器,android音乐视频播放器.doc
  8. 万字自动化测试面试题,助你吊打面试官
  9. Mac系统常用软件总结
  10. PMP新考纲 敏捷题目 (一)