Использование набора страниц Свойства печати


Эта тема описывает типовой код, который показывает на экране набор страниц Свойства печати (Print Property Sheet), так что пользователь может выбрать варианты печати документа. Типовой код сначала размещает и инициализирует структуру PRINTDLGEX, затем вызывает функцию PrintDlgEx, чтобы показать на экране вкладку свойств.

Типовой код устанавливает флажок PD_RETURNDC в члене Flags структуры PRINTDLG. Это заставляет функцию PrintDlgEx возвратить дескриптор контекста устройства выбранного принтера в члене hDC структуры. Вы можете использовать дескриптор в функциях, которые формируют изображение вывода данных, отправленных принтеру.

При вводе данных, типовой код устанавливает члены hDevMode и hDevNames  в значение ПУСТО (NULL). Если  функцией возвращено значение S_OK, эти члены возвращают дескрипторы, а структуры 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;

//  Вызов вкладки свойств Печать (Print).

hResult = PrintDlgEx(pPDX);

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

    // Пользователь щелкнул по кнопке Печать (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;
}

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz