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

项目组最近在全力开发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的全部文件
    WTL项目文件

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

  4. 在项目中添加对WTL的引用
    引用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界面描述的封装,可以非常轻松的扩展或引入到其他项目中。

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值