Использование стандартных диалогов
Страница 5. Использование диалогового окна свойств печати


 

Использование диалогового окна свойств печати

Чтобы отобразить диалог свойств печати, необходимо сначала заполнить структуру PRINTDLGEX, а затем вызвать функцию PrintDlgEx.

Чтобы заставить функцию PrintDlgEx вернуть контекст устройства (в переменной hDC) выбранного принтера, необходимо установить флаг PD_RETURNDC в переменной Flags структуры PRINTDLG.

Изначально, переменные hDevMode и hDevNames установлены в NULL. Если функция возвратит S_OK, то эти переменные будут содержать дескрипторы на структуры DEVMODE и DEVNAMES, содержащие информацию о пользовательском вводе, а так же информацию о принтере. Далее, эту информацию можно использовать для отправки данных на выбранный принтер.

После завершения печати, необходимо освободить память выделенную под DEVMODE и DEVNAMES и удалить контекст устройства.

Пример:

HRESULT DisplayPrintPropertySheet(
HWND hWnd // окно, являющееся владельцем диалога свойств печати
)
{
HRESULT hResult;
LPPRINTDLGEX pPDX = NULL;
LPPRINTPAGERANGE pPageRanges = NULL;

// Выделяем память для структуры PRINTDLGEX.

pPDX = (LPPRINTDLGEX)GlobalAlloc(GPTR, sizeof(PRINTDLGEX));
if (!pPDX)
return E_OUTOFMEMORY;

// Выделяем память для массива структур PRINTPAGERANGE.

pPageRanges = (LPPRINTPAGERANGE) GlobalAlloc(GPTR,
10 * sizeof(PRINTPAGERANGE));
if (!pPageRanges)
return E_OUTOFMEMORY;

// Инициализируем структуру PRINTDLGEX.

pPDX->lStructSize = sizeof(PRINTDLGEX);
pPDX->hwndOwner = hWnd;
pPDX->hDevMode = NULL;
pPDX->hDevNames = NULL;
pPDX->hDC = NULL;
pPDX->Flags = PD_RETURNDC | PD_COLLATE;
pPDX->Flags2 = 0;
pPDX->ExclusionFlags = 0;
pPDX->nPageRanges = 0;
pPDX->nMaxPageRanges = 10;
pPDX->lpPageRanges = pPageRanges;
pPDX->nMinPage = 1;
pPDX->nMaxPage = 1000;
pPDX->nCopies = 1;
pPDX->hInstance = 0;
pPDX->lpPrintTemplateName = NULL;
pPDX->lpCallback = NULL;
pPDX->nPropertyPages = 0;
pPDX->lphPropertyPages = NULL;
pPDX->nStartPage = START_PAGE_GENERAL;
pPDX->dwResultAction = 0;

// Показываем диалоговое окно свойств печати.

hResult = PrintDlgEx(pPDX);

if ( (hResult == S_OK) &&
pPDX->dwResultAction == PD_RESULT_PRINT) {

// После того как пользователь нажмёт кнопку "Печать",
// можно использовать DC и другую информацию, возвращённую в
// структуре PRINTDLGEX для печати документа

}

if (pPDX->hDC != NULL)
DeleteDC(pPDX->hDC);
if (pPDX->hDevMode != NULL)
GlobalFree(pPDX->hDevMode);
if (pPDX->hDevNames != NULL)
GlobalFree(pPDX->hDevNames);

return hResult;
}

 
« Предыдущая статья   Следующая статья »