Я давно не использовал VC ++ 6, поэтому я исхожу из довольно далеких воспоминаний, но общая идея довольно проста.
Полный подход
Ваше мнение имеет функцию-член DoPreparePrinting
. По умолчанию это создает объект CPrintDialog
, затем вызывает CPrintDialog
s DoModal
для отображения диалогового окна настроек печати. В конце концов (но не в DoPreparePrinting
, если память не изменяет) вызов CPrinterDialog
s CreatePrinterDC
(очевидно, достаточно) создает D C для принтера, используя настройки, введенные пользователем в диалоговом окне.
Чтобы обойти диалог, вы можете переопределить DoPreparePrinting
. Это получает указатель на CPrintDialog
. Поскольку вы не хотите показывать диалоговое окно печати, очевидно, что не будет вызывать его член DoModal
. Вместо этого вы заполните его структуры DEVMODE
и DEVNAMES
для принтера и любых настроек, которые захотите. Затем, когда вызывается CreatePrinterDC
, он будет использовать то, что вы заполнили, без отображения диалогового окна.
Мой личный совет - выполнить запуск, используя диалоговое окно под отладчиком, а затем после CPrintDialog
' s DoModal
вернулся, просмотрите возвращенную структуру DEVNAMES
. Возможно, она вам не понадобится, но я обнаружил, что структура DEVNAMES
немного сбивает с толку, когда мне в первый раз пришлось настраивать ее самостоятельно. DEVMODE
больше и, возможно, сложнее, но я обычно просто модифицировал несколько частей и оставил большую часть со значениями по умолчанию.
Упрощенный подход
Если вы просто Если вы хотите использовать системные настройки печати по умолчанию, есть более простой подход: вы можете переопределить OnPreparePrinting
. Он получает параметр pInfo
, который является указателем на CPrintInfo
. У него есть член m_bDirect
, который вы можете установить на true
, чтобы выполнять «прямую» печать, при которой просто используются настройки по умолчанию без использования диалогового окна принтера. Я точно не помню, когда был добавлен m_bDirect. Если он отсутствует, есть «трюк» для получения того же эффекта: реализация по умолчанию DoPreparePrinting
не отображает диалоговое окно печати для предварительного просмотра печати, поэтому вы переопределяете OnPreparePrinting
, чтобы установить m_bPreview
в значение true, вызывать DoPreparePrinting
, затем установите m_bPreview
обратно на false
.