Source code contained in Charles Petzold's excellent Programming Windows 5th edition. No representation is made that the source code belongs to me, it's simply reproduced here for convenience (so you don't need to dig up the physical media of the book) and remains the copyright of Charles Petzold. Consult readme.txt
(the TXT that came with the book) for additional information.
You'll need Visual Studio 2022 with the Desktop development with C++ workload installed. Some samples use MFC, so you'll need to install the C++ MFC for latest v143 build tools (x86 & x64) Visual Studio component to build them (MFC is not installed by default in newer versions of Visual Studio). You should then be able to open any of the VS solution files and immediately build them. It may be possible to open the VS solution files using older (but still modern) versions of Visual Studio, but I've not tested this.
All samples have been updated to use Visual Studio 2022 and retargeted to use the latest Windows SDK. An invalid free that was causing crashes in Chapter 9's Environ sample has been fixed, and a separate crash in Chapter 10's PoePoem sample has also been fixed. The old *.dep
, *.dsw
, and *.dsp
files can be found in the earlier commits if you need them. That being said, the source code is two decades old and has been minimally retouched here. If you're after a more thorough overhaul of the codebase, see here, or do a search on GitHub.
Most samples still function (credit to Microsoft and their emphasis on backwards compatibility), but some do not, particularly in Chapter 16 due to the requirement of hardware with 256-bit display pallete. Needless to say, decades after these samples were written, such hardware now exists mostly as a historical note of a bygone era in computing.
Some samples generate deprecation and security warnings upon compilation, and I recommend you heed those warnings if you intend to use any code in production. Remember that this is decades old Win32 code -- depending on what you're trying to do, more modern approaches such as C++/WinRT, WinUI 3, wxWidgets, Qt, Ultimate++, Boost, POCO C++, or newer additions to the C++ standard library (C++11 onwards) may be more appropriate.
When using any Win32 code from this repo in production, always consult the Windows API Index for relevant and updated API usage notes, as some APIs may have since been deprecated or had their behaviour modified in newer versions of Windows.
- The Windows API Index
- Jeffrey Richter and Christophe Nasarre's Windows via C/C++ 5th edition. An excellent book on Windows system programming. Source code repo here.
- Microsoft's COM and ATL
- Microsoft's Universal Windows Platform
- Microsoft's C++/WinRT. A modern C++17 projection over the Windows Runtime APIs.
- Microsoft's WinUI 3. WinUI 3 is Microsoft's latest native UI component.
- Microsoft's Get Started with Win32 and C++
- Microsoft's Build desktop Windows apps using the Win32 API
- Microsoft's Modernize Your Desktop Apps. Contains advice and examples on applying the latest Windows 11 UI features to native Windows apps, including Win32 ones.
- theForger's Win32 API Programming Tutorial. The tutorials are old, but still useful. Tutorial source code is available on that site as a zip, and I've also got a repo of it.
- ZetCode's Windows API tutorial