/programming-windows-5th-edition

Unofficial source code repo for Charles Petzold's Programming Windows 5th Edition.

Primary LanguageC

Programming Windows 5th edition source code

Introduction

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.

Building

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.

Changes

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.

Considerations

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.

Additional resources

General

Samples

Related technologies

Tutorials and guides