Код, который вы опубликовали, прекрасно работает в тестовом приложении, которое я установил, так что технически в этом нет ничего плохого.
Если вы укажете hwndOwner как NULL, как в вашем примере кода, диалоговое окно печати откроется как немодальное диалоговое окно, которое может открывать за GUI вашего приложения - поэтому ваш код может правильно открывать диалоговое окно ты просто не видишь этого. Поскольку немодальное диалоговое окно не мешает вам взаимодействовать с окном, которое его породило, вы сможете полностью взаимодействовать со своим основным графическим интерфейсом, не понимая, что за ним скрывается диалоговое окно печати.
Не можете ли вы указать hwndOwner? Это действительно должен быть дескриптор окна, открывающего диалоговое окно печати, чтобы, как я упоминал выше, он не давал пользователю взаимодействовать с главным окном, пока настройки принтера настроены.