Working with a "classic" C API with strong legacy commitments has its upsides - it's mostly immune to faddishness and the discipline required to work in C still remains. But certain aspects, such as packing parameters into WPARAM/LPARAM have definitely aged past "anachronism" and into "barbarism", I think. I'm sure you're dealing with plenty of that if you're doing GUI.
I do find it a hassle how many "don't care" parameters you have to zero out or discard in Win32, because of course this far predates function overloading. 99+% of the time you're not going to be opening a mutex handle with some particular alternate credentials, or whatever.
It's also regrettable that SEH is usually off the table.
Are you going through Direct2D or just going old-school and using GDI?