Non Client painting in Windows allows you to custom paint the frames,
border and caption of your window. Two important messages need to be handled:
WM_NCCALCSIZE, which determines the size of the non-client
WM_NCPAINT where you do the painting.
WM_NCPAINT message is sent to all windows just prior the usual
WM_PAINT message. Unlike
WM_PAINT, you need to grab
hold of the Device Context (HDC) yourself using the
Once set up, you can do custom painting of any sort of the Window border and caption.
The sample included here custom paints my old
Property Grid control with bulky and slanted headers.
It's not very pretty, but shows that it is really not too difficult to create
new headerbars for the common
There are only a few samples available from Microsoft to demonstrate this technique. It's probably due to the fact that they change the appearance (theme) of the standard controls from time to time (OS to OS), and too much custom painting will create non-compliant controls in the end. I have actually seen comments like "if they're writing the code, they must know what they're doing." As someone who writes code, I appreciate the vote of confidence, but knowing how to program isn't the same thing as knowing what you're doing. Knowing when not to write a certain piece of code is probably a much more powerful gift.
Source Code DependenciesMicrosoft WTL 7.1 Library
|Source Code (56 Kb)|