CreateSaveDC VC++ Example
void CEPrintDemoView::PlayGDICommands(HDC hdc)
{
HPEN hPen;
HBRUSH hBrush,hFillBrush;
RECT rt,rcFillRect;
GetClientRect(&rt);
hPen = CreatePen(PS_DASHDOT,1, RGB(0,0,255));
hBrush = CreateHatchBrush(HS_CROSS, RGB(0,0,0));
hFillBrush = CreateSolidBrush(RGB(255,255,255));
SaveDC(hdc);
SelectObject(hdc, hBrush);
SelectObject(hdc, hPen);
rcFillRect.top= 0;
rcFillRect.left = 0;
rcFillRect.right = GetDeviceCaps(hdc, HORZRES);
rcFillRect.bottom = GetDeviceCaps(hdc, VERTRES);
// Do some GDI commands.
FillRect(hdc,&rcFillRect,hFillBrush);
Rectangle(hdc,0,0,100,100);
DeleteObject(hFillBrush);
RestoreDC(hdc,-1);
DeleteObject(hPen);
DeleteObject(hBrush);
}
void CEPrintDemoView::OnCreateSaveDC()
{
IEpnMultiSaveOptions * pMultiSaveOptions;
IEpnExtraDcOptions * pExtraDcOptions;
IEPrint * pLeadPrnt;
HRESULT hr;
long hDC = NULL;
hr = ::CoCreateInstance(CLSID_EPrint, NULL, CLSCTX_ALL, IID_IEPrint, (void**) &pLeadPrnt);
if(FAILED(hr))
return;
hr = ::CoCreateInstance(CLSID_EpnMultiSaveOptions, NULL, CLSCTX_ALL, IID_IEpnMultiSaveOptions, (void**) &pMultiSaveOptions);
if(FAILED(hr))
return;
hr = ::CoCreateInstance(CLSID_EpnExtraDcOptions, NULL, CLSCTX_ALL, IID_IEpnExtraDcOptions, (void**) &pExtraDcOptions);
if(FAILED(hr))
return;
if (pLeadPrnt-> IsSupportLocked (SUPPORT_OEM))
pLeadPrnt->UnlockSupport (SUPPORT_OEM, OEM_KEY);
pLeadPrnt->GetPrinterSaveOptions (TEST_PRINTER_NAME, &pMultiSaveOptions);
pExtraDcOptions->Password = "Test Password";
hDC = pLeadPrnt->CreateSaveDC (TEST_PRINTER_NAME, NULL, pMultiSaveOptions->GetPrinterSaveOptions(0), pExtraDcOptions);
if(hDC)
{
short nRet;
_bstr_t bstr(" file test ");
nRet = pLeadPrnt->StartDoc (hDC, bstr);
if(nRet == 0)
{
nRet = pLeadPrnt->StartPage (hDC);
if(nRet == 0)
{
PlayGDICommands((HDC)hDC);
nRet = pLeadPrnt->EndPage (hDC);
}
nRet = pLeadPrnt->EndDoc (hDC);
}
pLeadPrnt->DeleteDC ((long)hDC);
}
if(pExtraDcOptions)
{
pExtraDcOptions->Release();
pExtraDcOptions = NULL;
}
if(pMultiSaveOptions)
{
pMultiSaveOptions->Release();
pMultiSaveOptions = NULL;
}
if(pLeadPrnt)
{
pLeadPrnt->Release();
pLeadPrnt = NULL;
}
}