I'm coming from a background whereby pointers should generally be compared with 'NULL' and integers with '0'.
Since I didn't perceive Windows handles to be 'pointers' in the pure sense (being 'handles'), I'd got into the habit of comparing them with 0 rather than 'NULL'.
Clearly they're implemented internally as pointers nowadays, but I personally consider that to be merely for acquiring some type-safety rather than because they are intrinsically pointers.
Anyway, I just noticed that the help for CreateIC which returns an HDC states that if the function fails then it returns 'NULL'.
Now I'm confused - and am wondering what other people reckon - is it more correct to consider a Windows handle to be a pointer (and therefore check it against 'NULL' or 'nullptr' for modern compilers) or should it be considered to be an integer?
Compare it against the documented error return value. That means that you should compare it against INVALID_HANDLE
, 0, -1, non-zero, or <=32
(I'm not kidding with the last one, see ShellExecute).