Click here to Skip to main content
Click here to Skip to main content
Go to top

Introduction to WTL - Part 1

, 30 Apr 2001
Rate this:
Please Sign up or sign in to vote.
The 'what' and 'where do I get it' of WTL

What is the Windows Template Library you ask?

Brief history

In the beginning when ATL appeared, developers were happy. We had a way to write fast, small COM components. Well the happiness ended soon after when we found that we had to write code wrappers for any of the window's controls we wanted to use. So MS responded to our plight and gave us WTL, completely unfinished and unsupported (for now).

See WTL Documented for more information.


  • All the power of C++
  • Thin wrappers for the common controls
  • A small but functional Application framework (minus the ever-popular Document-View Architecture)
  • Print and Print Preview support
  • Ports of MFC’s CPoint, CRect, CSize, CString, etc.
  • New Message cracking Macros, conceivably they’re an upgrade of the existing ones.

All this but no documentation! Oh well, we're all professionals and can read code, so for now that will have to suffice.

Where do you get it?

Thanks to Nenad Stefanovic of the WTL development team we now have 2 methods of downloading the WTL source file (Special thanks to Shannon McCoy for pointing this out).

Method 1

Click here to download the WTL source files.

Method 2

Go and get the Platform SDKs.

WTL resides in the Platform SDKs. To find and install WTL you need to download the latest release of the Platform SDKs. In the screen seen below, Expand the Source code tree item and select the Windows Template Library for download.

So, you have the SDKs installed, your ready to go... well almost. Don’t forget to add the WTL include path to Developer Studio. To do that in Developer Studio go to Tools | Options and click on the 'Directories' tab. Once you are there simply add the include path to the 'Include files' list.

What’s in the box?

Let’s take a look at the goodies we got. The WTL is setup so that all the code resides in header files; it's setup this way so that we have full control of what is been tacked into your project.

The Headers

File name Description
atlapp.h Message loop, interfaces, general app stuff
atlcrack.h Message cracker macros atlctrls.h Standard and common control classes
atlctrlw.h Command bar class atlctrlx.h Bitmap button, check list view, and other controls
atlddx.h Data exchange for dialogs and windows
atldlgs.h Common dialog classes, property sheet and page classes
atlframe.h Frame window classes, MDI, update UI classes

DC classes, GDI object classes


ATL ports of CPoint, CRect, CSize, CString, etc.


Printing and print preview

atlres.h Standard resource Ids
atlscrl.h Scrollable windows
atlsplit.h Splitter windows
atluser.h Menu class

The Samples

Directory Description

Multithreaded notepad sample


ATL version of the MDI sample


ATL version of the GuidGen sample

The App-Wizard

File Name Description
AtlApp60.Awx ATL/WTL AppWizard

And of course there is a 'readme.txt', which outlines the class hierarchy of the WTL. Sorry, I said there was no documentation, my bad Smile | :)

Thats it! You got the WTL and your ready to go.

Ben Burnett


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Ben Burnett
Student University of Lethbridge
Canada Canada
Ben was born in New Zealand and grew up in Mexico; however, he has lived in Canada for most of his adult life. He has traveled to a few places in Canada so far: British Columbia, Saskatchewan, Manitoba, Ontario and Nova Scotia, but has only ever lived in Alberta — all over Alberta. From Lethbridge to Calgary to Fort McMurray: he has seen most of what the province has to offer. He has also left the comfort of his—at the time—home country and gone abroad. In recent history he has been in China, New Zealand, the US, Central America and back to Canada (where he now resides).
He completed a degree at the University of Lethbridge, in Computer Science; worked for the University of Wisconsin-Madison in the Computer Sciences Department as a Systems Programmer for the Condor Research Project[^]; and is currently completing another degree at the University of Lethbridge, once again, in Computer Science.
Ben has been known to enjoy reading, watching movies, playing console games, and learning everything he can about computers. And, more importantly, with regards to his character: does not usually speaks about himself in the third person.

Comments and Discussions

GeneralUsing Microsoft Agent Pinmemberiacchus3-Feb-02 16:25 
QuestionWTL and MFC together? PinmemberAnonymous14-Jun-01 6:15 
GeneralNew Link for WTL 3.1 PinmemberShannon McCoy23-Mar-01 23:35 
GeneralCListBox Pinsussmarkcarl22-Sep-00 14:10 
GeneralRe: CListBox PinmemberChuso24-Jan-01 5:45 
GeneralRe: CListBox ( Damn html encode! ) PinmemberChuso24-Jan-01 5:48 
GeneralTrouble downloading WTL PinsussManuel13-Sep-00 4:54 
GeneralRe: Trouble downloading WTL (solved) PinmemberPetr Prikryl15-Jan-01 4:10 
As I am connected to Internet via somethink like 20kb modem, the
official fancy installer of Platform SDK is very unfriendly for me.
Because of that I perfectly understand those who are asking
questions like ascet even when they know that it is in Platform SDK.
Unfortunately, the WTL is probably not available separately (it
would be something like 162KB zip file).
Fortunately, it is possible to download a single cabinet file
(approximately 800KB) to install WTL (only the .h files).
Firstly, get the following cabinet file (you can just copy
the following line to the Internet Explorer, or you can use some
ftp client to do that):
The size of the cabinet for Oct2000 is 893058 bytes.
Then create, let's say, WTLextract.bat file and copy the following
lines into it:
mkdir WTL
extract /L WTL Atl*.*
cd WTL
rename AtlApp_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlApp.h
rename AtlCrack_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlCrack.h
rename AtlCtrls_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlCtrls.h
rename AtlCtrlw_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlCtrlw.h
rename AtlCtrlx_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlCtrlx.h
rename AtlDdx_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlDdx.h
rename AtlDlgs_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlDlgs.h
rename AtlFrame_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlFrame.h
rename AtlGdi_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlGdi.h
rename AtlMisc_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlMisc.h
rename AtlPrint_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlPrint.h
rename AtlRes_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlRes.h
rename AtlScrl_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlScrl.h
rename AtlSplit_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlSplit.h
rename AtlUser_h.A1000D79_C485_4CB3_8AB0_B6D38ED2B38C AtlUser.h
Then run this batch in the directory where the cabinet file
is stored. The WTL subdirectory is created and filled with the
files. Copy the content to your "WTL/Include" subdirectory.
Notice: the previous version of WTL was placed in the cabinet
file of the same name. It is likely that the next version
will be inside of the cabinet with the same name.
Warning: AtlGdi.h still contains a bug in the
CDCT<>::GetTabbedTextExtent(). See the message
with subject "WTL 3.1: bug in AtlGdi.h (repost from 6 Oct)"
P.S. The apparently contains also WTL examples.
If anybody knows more details on which files should be extracted, where
they should be placed, or whether other cabinets contains parts of WTL,
please post some hints.

Petr Prikryl, SKIL s.r.o.
GeneralGreat solution PinmemberF Braem7-Feb-01 3:34 
GeneralRe: Trouble downloading WTL (solved) PinmemberMichael Fink5-Mar-01 2:00 
GeneralRe: Trouble downloading WTL (solved) PinmemberPetr Prikryl5-Mar-01 22:58 
GeneralPoor Windows Programmers! PinsussFabio29-Aug-00 11:25 
GeneralRe: Poor Windows Programmers! PinsussJWright6-Oct-00 6:46 
GeneralRe: Poor Windows Programmers! Pinsussjhalsey11-Oct-00 12:41 
GeneralRe: Poor Windows Programmers! Pinsussjhalsey11-Oct-00 12:42 
GeneralRe: Poor Windows Programmers! Pinsussjhalsey11-Oct-00 12:43 
GeneralRe: Poor Windows Programmers! PinsussJWright13-Oct-00 5:42 
GeneralRe: Poor Windows Programmers! PinsussAnonymous2-Nov-00 13:21 
GeneralRe: Poor Windows Programmers! PinmemberFabio3-Nov-00 12:31 
GeneralRe: Poor Windows Programmers! PinmemberCrispy1-Apr-01 7:55 
GeneralRe: Poor Windows Programmers! PinmemberS van Leent8-Jan-02 8:27 
Generalassert(++critique != convaincant | réaliste) Pinmember-o-m-24-Apr-01 8:19 
GeneralRe: Poor Windows Programmers! PinmemberAnonymous8-Oct-01 17:55 
GeneralRe: Poor Windows Programmers! PinsussShannon McCoy15-Aug-02 23:27 
GeneralRe: Poor Windows Programmers! PinmemberBill Dickinson25-Feb-03 11:01 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140916.1 | Last Updated 1 May 2001
Article Copyright 2000 by Ben Burnett
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid