Класс CPrintDialog
Инкапсулирует службы, предоставляемые стандартным диалоговым окном Windows для печати.
Синтаксис
class CPrintDialog : public CCommonDialog
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CPrintDialog::CPrintDialog |
Формирует объект CPrintDialog . |
Открытые методы
Имя | Описание |
---|---|
CPrintDialog::CreatePrinterDC |
Создает контекст устройства принтера без отображения диалогового окна "Печать". |
CPrintDialog::DoModal |
Отображает диалоговое окно и позволяет пользователю выбирать. |
CPrintDialog::GetCopies |
Извлекает количество запрошенных копий. |
CPrintDialog::GetDefaults |
Извлекает значения по умолчанию устройства без отображения диалогового окна. |
CPrintDialog::GetDeviceName |
Извлекает имя выбранного устройства принтера. |
CPrintDialog::GetDevMode |
Извлекает структуру DEVMODE . |
CPrintDialog::GetDriverName |
Извлекает имя выбранного драйвера принтера. |
CPrintDialog::GetFromPage |
Извлекает начальную страницу диапазона печати. |
CPrintDialog::GetPortName |
Извлекает имя выбранного порта принтера. |
CPrintDialog::GetPrinterDC |
Извлекает дескриптор контекста устройства принтера. |
CPrintDialog::GetToPage |
Извлекает конечную страницу диапазона печати. |
CPrintDialog::PrintAll |
Определяет, следует ли печатать все страницы документа. |
CPrintDialog::PrintCollate |
Определяет, запрашиваются ли сортировка копий. |
CPrintDialog::PrintRange |
Определяет, следует ли печатать только указанный диапазон страниц. |
CPrintDialog::PrintSelection |
Определяет, следует ли печатать только выбранные в данный момент элементы. |
Открытые члены данных
Имя | Описание |
---|---|
CPrintDialog::m_pd |
Структура, используемая для настройки CPrintDialog объекта. |
Замечания
Распространенные диалоговые окна печати предоставляют простой способ реализации диалоговых окон настройки печати и печати в соответствии со стандартами Windows.
Примечание.
Класс CPrintDialogEx
инкапсулирует службы, предоставляемые листом свойств Windows Print. Дополнительные сведения см. в обзоре CPrintDialogEx
.
CPrintDialog
Функциональные возможности заменяются CPageSetupDialog
тем, что предназначено для предоставления общего диалогового окна для настройки печати и настройки страницы.
Платформу можно использовать для обработки многих аспектов процесса печати приложения. В этом случае платформа автоматически отображает общее диалоговое окно Windows для печати. Вы также можете использовать платформу для печати приложения, но переопределить общее диалоговое окно печати с помощью собственного диалогового окна печати. Дополнительные сведения об использовании платформы для обработки задач печати см. в статье "Печать".
Если вы хотите, чтобы приложение обрабатывало печать без участия платформы, можно использовать CPrintDialog
класс "как есть" с предоставленным конструктором, или вы можете наследить собственный класс диалогов от CPrintDialog
и написать конструктор в соответствии с вашими потребностями. В любом случае эти диалоговые окна будут вести себя как стандартные диалоговые окна MFC, так как они являются производными от класса CCommonDialog
.
Чтобы использовать CPrintDialog
объект, сначала создайте объект с помощью конструктора CPrintDialog
. После создания диалогового окна можно задать или изменить любые значения в m_pd
структуре, чтобы инициализировать значения элементов управления диалогового окна. Структура m_pd
имеет тип PRINTDLG
. Дополнительные сведения об этой структуре см. в пакете SDK для Windows.
Если вы не предоставляете собственные дескрипторы m_pd
для элементов и hDevNames
элементов, обязательно вызовите функцию GlobalFree
Windows для этих дескрипторов при завершении работы с диалоговым hDevMode
окном. При использовании реализации программы установки печати платформы, предоставленной CWinApp::OnFilePrintSetup
не требуется освободить эти дескрипторы. Деструктор поддерживает деструктор и освобождает CWinApp
деструкторCWinApp
. При использовании CPrintDialog
автономных дескрипторов необходимо освободить только эти дескрипторы.
После инициализации элементов управления диалогового окна вызовите DoModal
функцию-член, чтобы отобразить диалоговое окно и разрешить пользователю выбрать параметры печати. DoModal
возвращает значение, выбранное пользователем кнопкой "ОК" (IDOK
) или "Отмена" (IDCANCEL
).
Если DoModal
возвращается IDOK
, можно использовать одну из CPrintDialog
функций-членов для получения входных данных пользователем.
Функция-член CPrintDialog::GetDefaults
полезна для получения текущего принтера по умолчанию без отображения диалогового окна. Эта функция-член не требует взаимодействия с пользователем.
Функцию Windows CommDlgExtendedError
можно использовать, чтобы определить, произошла ли ошибка во время инициализации диалогового окна и узнать больше об ошибке. Дополнительные сведения об этой функции см. в пакете SDK для Windows.
CPrintDialog
COMMDLG.DLL
использует файл, который поставляется с Windows версии 3.1 и более поздних версий.
Чтобы настроить диалоговое окно, наследуйте класс, CPrintDialog
предоставьте пользовательский шаблон диалогового окна и добавьте карту сообщений для обработки уведомлений из расширенных элементов управления. Все необработанные сообщения должны передаваться в базовый класс. Настройка функции перехватчика не требуется.
Чтобы обрабатывать одно и то же сообщение по-разному в зависимости от того, является ли диалоговое окно "Печать" или "Настройка печати", необходимо наследовать класс для каждого диалогового окна. Кроме того, необходимо переопределить функцию Windows AttachOnSetup
, которая обрабатывает создание нового диалогового окна при выборе кнопки "Настройка печати" в диалоговом окне "Печать".
Дополнительные сведения об использовании CPrintDialog
см. в разделе "Общие классы диалогов".
Иерархия наследования
CPrintDialog
Требования
Заголовок: afxdlgs.h
CPrintDialog::CPrintDialog
Создает диалоговое окно "Печать Windows" или "Настройка печати".
CPrintDialog(
BOOL bPrintSetupOnly,
DWORD dwFlags = PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION,
CWnd* pParentWnd = NULL);
Параметры
bPrintSetupOnly
Указывает, отображается ли стандартное диалоговое окно "Печать Windows" или диалоговое окно "Настройка печати". Установите этот параметр для TRUE
отображения стандартного диалогового окна установки печати Windows. Установите его для FALSE
отображения диалогового окна "Печать Windows". Если bPrintSetupOnly
это FALSE
так, кнопка "Настройка печати" по-прежнему отображается в диалоговом окне "Печать".
dwFlags
Один или несколько флагов, которые можно использовать для настройки параметров диалогового окна, в сочетании с побитовым оператором OR. Например, PD_ALLPAGES
флаг задает диапазон печати по умолчанию для всех страниц документа. PRINTDLG
Дополнительные сведения об этих флагах см. в структуре пакета SDK для Windows.
pParentWnd
Указатель на окно родительского или владельца диалогового окна.
Замечания
Эта функция-член создает только объект. Используйте функцию-член для DoModal
отображения диалогового окна.
Обратите внимание, что при вызове конструктора с bPrintSetupOnly
заданным значением FALSE
PD_RETURNDC
флаг используется автоматически. После вызова DoModal
контроллера GetDefaults
GetPrinterDC
домена принтера будет возвращен.m_pd.hDC
Этот контроллер домена должен быть освобожден с вызовом DeleteDC
вызывающего объекта CPrintDialog
.
Пример
// Display the Windows Print dialog box with "All" radio button
// initially selected. All other radio buttons are disabled.
CPrintDialog dlg1(FALSE);
// Display the Windows Print dialog box with Collate check box checked.
CPrintDialog dlg2(FALSE, PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE);
// Display the Windows Print dialog box with "Selection" radio
// button initially selected. "All" radio button is enabled
// but "Pages" radio button is disabled.
CPrintDialog dlg3(FALSE, PD_SELECTION | PD_USEDEVMODECOPIES);
CPrintDialog::CreatePrinterDC
Создает контекст устройства принтера (DC) из DEVMODE
структур и DEVNAMES
структур.
HDC CreatePrinterDC();
Возвращаемое значение
Обработайте только что созданный контекст устройства принтера.
Замечания
Предполагается, что этот контроллер домена является текущим контроллером домена принтера, и все другие ранее полученные контроллеры данных принтера должны быть удалены пользователем. Эту функцию можно вызвать, и результирующий контроллер домена, не отображая диалоговое окно "Печать".
Пример
// Display the Windows Print dialog box with "All" radio button
// initially selected. All other radio buttons are disabled.
CPrintDialog dlg(FALSE);
if (dlg.DoModal() == IDOK)
{
// Create a printer device context (DC) based on the information
// selected from the Print dialog.
HDC hdc = dlg.CreatePrinterDC();
ASSERT(hdc);
}
CPrintDialog::DoModal
Отображает диалоговое окно общей печати Windows и позволяет пользователю выбирать различные параметры печати, такие как количество копий, диапазон страниц и сортировка копий.
virtual INT_PTR DoModal();
Возвращаемое значение
IDOK
или IDCANCEL
. Если IDCANCEL
возвращается, вызовите функцию Windows CommDlgExtendedError
, чтобы определить, произошла ли ошибка.
IDOK
и IDCANCEL
являются константами, указывающими, выбран ли пользователь кнопку "ОК " или "Отмена ".
Замечания
Если вы хотите инициализировать различные параметры диалогового окна печати, задав элементы структуры, необходимо сделать это перед вызовомDoModal
, но после создания объекта диалогового m_pd
окна.
После вызова DoModal
можно вызвать другие функции-члены, чтобы получить параметры или данные, введенные пользователем в диалоговом окне.
Обратите внимание, что при вызове конструктора с bPrintSetupOnly
заданным значением FALSE
PD_RETURNDC
флаг используется автоматически. После вызова DoModal
контроллера GetDefaults
GetPrinterDC
домена принтера будет возвращен.m_pd.hDC
Этот контроллер домена должен быть освобожден с вызовом DeleteDC
вызывающего объекта CPrintDialog
.
Пример
Пример см. в примере CPrintDialog::CreatePrinterDC
.
CPrintDialog::GetCopies
Извлекает количество запрошенных копий.
int GetCopies() const;
Возвращаемое значение
Количество запрошенных копий.
Замечания
Вызовите эту функцию после вызова DoModal
, чтобы получить количество запрошенных копий.
Пример
Пример см. в примере CPrintDialog::PrintCollate
.
CPrintDialog::GetDefaults
Извлекает значения по умолчанию устройства принтера по умолчанию без отображения диалогового окна.
BOOL GetDefaults();
Возвращаемое значение
Ненулевое значение, если функция была успешной; в противном случае — 0.
Замечания
Полученные значения помещаются в структуру m_pd
.
В некоторых случаях вызов этой функции вызывает конструктор с CPrintDialog
bPrintSetupOnly
заданным значением FALSE
. В таких случаях контроллер домена принтера и hDevNames
hDevMode
(два дескриптора, расположенные в элементе m_pd
данных), автоматически выделяются.
Если конструктор CPrintDialog
для вызова был вызван с bPrintSetupOnly
заданным значениемFALSE
, эта функция не только возвращается hDevNames
и hDevMode
находится в m_pd.hDevNames
m_pd.hDevMode
вызывающем объекте, но и возвращает контроллер домена принтера.m_pd.hDC
Он несет ответственность за удаление контроллера домена принтера и вызов функции Windows GlobalFree
на дескрипторах после завершения работы с CPrintDialog
объектом.
Пример
Этот фрагмент кода получает контекст устройства принтера по умолчанию и сообщает пользователю разрешение принтера в точках на дюйм. (Этот атрибут возможностей принтера часто называется DPI.)
CPrintDialog dlg(FALSE);
if (!dlg.GetDefaults())
{
AfxMessageBox(_T("You have no default printer!"));
}
else
{
// attach to the DC we were given
CDC dc;
dc.Attach(dlg.m_pd.hDC);
// ask for the measurements
int nHorz = dc.GetDeviceCaps(LOGPIXELSX);
int nVert = dc.GetDeviceCaps(LOGPIXELSY);
// almost always the same in both directions, but sometimes not!
CString str;
if (nHorz == nVert)
{
str.Format(_T("Your printer supports %d pixels per inch"), nHorz);
}
else
{
str.Format(_T("Your printer supports %d pixels per inch ")
_T("horizontal resolution, and %d pixels per inch vertical ")
_T("resolution"), nHorz, nVert);
}
// tell the user
AfxMessageBox(str);
// Note: no need to call Detach() because we want the CDC destructor
// to call FreeDC() on the DC we borrowed from the common dialog
}
CPrintDialog::GetDeviceName
Извлекает имя выбранного устройства принтера.
CString GetDeviceName() const;
Возвращаемое значение
Имя выбранного принтера.
Замечания
Вызовите эту функцию после вызова DoModal
, чтобы получить имя выбранного принтера или после вызова GetDefaults
для получения текущего устройства по умолчанию принтера. Используйте указатель на CString
объект, возвращаемый GetDeviceName
в качестве значения lpszDeviceName
в вызове CDC::CreateDC
.
Пример
В этом фрагменте кода показаны имя принтера пользователя по умолчанию и порт, к которому он подключен, а также имя spooler, к которому используется принтер. В коде может отображаться окно сообщения, которое говорит: "Принтер по умолчанию — HP LaserJet IIIP на \\server\server\share с помощью winspool". Например.
CPrintDialog dlg(FALSE);
if (!dlg.GetDefaults())
{
AfxMessageBox(_T("You have no default printer!"));
}
else
{
CString strDescription;
strDescription.Format(_T("Your default printer is %s on %s using %s."),
(LPCTSTR)dlg.GetDeviceName(),
(LPCTSTR)dlg.GetPortName(),
(LPCTSTR)dlg.GetDriverName());
AfxMessageBox(strDescription);
}
CPrintDialog::GetDevMode
Извлекает структуру DEVMODE
.
LPDEVMODE GetDevMode() const;
Возвращаемое значение
Структура DEVMODE
данных, содержащая сведения об инициализации устройства и среде драйвера печати. Необходимо разблокировать память, взятую этой структурой, с помощью функции Windows GlobalUnlock
, которая описана в пакете SDK для Windows.
Замечания
Вызовите эту функцию после вызова DoModal
или GetDefaults
получения сведений о устройстве печати.
Пример
Пример см. в примере CPrintDialog::PrintCollate
.
CPrintDialog::GetDriverName
Извлекает имя выбранного драйвера принтера.
CString GetDriverName() const;
Возвращаемое значение
Указание CString
системного имени драйвера.
Замечания
Вызовите эту функцию после вызова DoModal
или GetDefaults
получения имени драйвера устройства принтера, определенного системой. Используйте указатель на CString
объект, возвращаемый GetDriverName
в качестве значения lpszDriverName
в вызове CDC::CreateDC
.
Пример
Пример см. в примере CPrintDialog::GetDeviceName
.
CPrintDialog::GetFromPage
Извлекает начальную страницу диапазона печати.
int GetFromPage() const;
Возвращаемое значение
Начальный номер страницы в диапазоне страниц для печати.
Замечания
Вызовите эту функцию после вызова DoModal
, чтобы получить начальный номер страницы в диапазоне страниц для печати.
Пример
Пример см. в примере CPrintDialog::m_pd
.
CPrintDialog::GetPortName
Извлекает имя выбранного порта принтера.
CString GetPortName() const;
Возвращаемое значение
Имя выбранного порта принтера.
Замечания
Вызовите эту функцию после вызова DoModal
или GetDefaults
получения имени выбранного порта принтера.
Пример
См. пример CPrintDialog ::GetDeviceName.
CPrintDialog::GetPrinterDC
Извлекает дескриптор контекста устройства принтера.
HDC GetPrinterDC() const;
Возвращаемое значение
Дескриптор контекста устройства принтера в случае успешного выполнения; в противном случае NULL
.
Замечания
bPrintSetupOnly
Если параметр конструктора CPrintDialog
(указывает, что отображается диалоговое окно печати), возвращает GetPrinterDC
дескриптор FALSE
контексту устройства принтера. Чтобы удалить контекст устройства, необходимо вызвать функцию Windows DeleteDC
, когда она будет выполнена.
Пример
CPrintDialog dlg(FALSE);
CPrintDialog dlg(FALSE);
if (dlg.DoModal() == IDOK)
{
// Get a handle to the printer device context (DC).
HDC hdc = dlg.GetPrinterDC();
ASSERT(hdc);
// Do something with the HDC...
// Clean up.
CDC::FromHandle(hdc)->DeleteDC();
}
CPrintDialog::GetToPage
Извлекает конечную страницу диапазона печати.
int GetToPage() const;
Возвращаемое значение
Конечный номер страницы в диапазоне страниц для печати.
Замечания
Вызовите эту функцию после вызова DoModal
, чтобы получить конечный номер страницы в диапазоне страниц для печати.
Пример
Пример см. в примере CPrintDialog::m_pd
.
CPrintDialog::m_pd
Структура, члены которой хранят характеристики объекта диалогового окна.
PRINTDLG& m_pd;
Замечания
После создания CPrintDialog
объекта можно задать m_pd
различные аспекты диалогового окна перед вызовом DoModal
функции-члена. Дополнительные сведения о m_pd
структуре см PRINTDLG
. в пакете SDK для Windows.
При непосредственном m_pd
изменении элемента данных вы переопределите любое поведение по умолчанию.
Пример
// Display the Windows Print dialog box with "Pages" radio button
// initially selected. "All" and "Pages" radio buttons are
// enabled as well.
CPrintDialog dlg(FALSE, PD_PAGENUMS | PD_USEDEVMODECOPIES);
dlg.m_pd.nMinPage = dlg.m_pd.nFromPage = 1;
dlg.m_pd.nMaxPage = dlg.m_pd.nToPage = 10;
if (dlg.DoModal() == IDOK)
{
// Determine the starting and ending page numbers for the range
// of pages to be printed.
int from_page = -1, to_page = -1;
if (dlg.PrintAll()) // print all pages in the document
{
from_page = dlg.m_pd.nMinPage;
to_page = dlg.m_pd.nMaxPage;
}
else if (dlg.PrintRange()) // print only a range of pages
{ // in the document
from_page = dlg.GetFromPage();
to_page = dlg.GetToPage();
}
else if (dlg.PrintSelection()) // print only the currently selected
// items
{
from_page = to_page = -1; // -1 to denote unknown yet
}
TRACE(_T("Print from %d to %d\n"), from_page, to_page);
}
CPrintDialog::PrintAll
Определяет, следует ли печатать все страницы документа.
BOOL PrintAll() const;
Возвращаемое значение
Ненулевое значение, если все страницы в документе должны быть напечатаны; в противном случае — 0.
Замечания
Вызовите эту функцию после вызова DoModal
, чтобы определить, следует ли печатать все страницы в документе.
Пример
Пример см. в примере CPrintDialog::m_pd
.
CPrintDialog::PrintCollate
Определяет, запрашиваются ли сортировка копий.
BOOL PrintCollate() const;
Возвращаемое значение
Ненулевое значение, если пользователь выбирает флажок сортировки в диалоговом окне; в противном случае — 0.
Замечания
Вызовите эту функцию после вызова DoModal
, чтобы определить, должен ли принтер сворачивать все печатные копии документа.
Пример
// Display the Windows Print dialog box with Collate check box checked.
CPrintDialog dlg(FALSE, PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS |
PD_HIDEPRINTTOFILE);
if (dlg.DoModal() == IDOK)
{
// If the collate check box is selected, then GetCopies() will return
// the number of copies printed. Otherwise, GetCopies() always
// returns 1. Then, the number of copies printed can be found from the
// DEVMODE structure of the printing device.
if (dlg.PrintCollate())
{
int num = dlg.GetCopies();
TRACE(_T("Number of copies printed = %d\n"), num);
}
else
{
LPDEVMODE devmode = dlg.GetDevMode();
TRACE(_T("Number of copies printed = %d\n"), devmode->dmCopies);
}
}
CPrintDialog::PrintRange
Определяет, следует ли печатать только указанный диапазон страниц.
BOOL PrintRange() const;
Возвращаемое значение
Ненулевое значение, если печатаются только диапазон страниц в документе; в противном случае — 0.
Замечания
Вызовите эту функцию после вызова DoModal
, чтобы определить, следует ли печатать только диапазон страниц в документе.
Пример
Пример см. в примере CPrintDialog::m_pd
.
CPrintDialog::PrintSelection
Определяет, следует ли печатать только выбранные в данный момент элементы.
BOOL PrintSelection() const;
Возвращаемое значение
Ненулевое значение, если печатаются только выбранные элементы; в противном случае — 0.
Замечания
Вызовите эту функцию после вызова DoModal
, чтобы определить, следует ли печатать только выбранные в данный момент элементы.
Пример
Пример см. в примере CPrintDialog::m_pd
.
См. также
Пример MFC DIBLOOK
CCommonDialog
Класс
Диаграмма иерархии
CPrintInfo
Структура