вся засада в контролах
WM_PRINT нормально работает, но контролы себя продолжают рисовать хоть ты тресни
даже если у контрола перехватывать WM_PAINT и рисовать в память уже допустим так
SendMessage(контрол,WM_PRINT,(WPARAM)myDC,..
или так
DefWindowProc(контрол,WM_PAINT,(WPARAM)myDC,..
или функцией PrintWindow
все равно, котролы рисуют себя прямо на окно
допустим если мышкой кликнуть на кнопку
у которой
case WM_PAINT:return 0;
то кнопка нарисуется