CreateEmailDC VC++ Example

void CEPrintDemoView::OnCreateEmailDC()
{
   IEpnMultiSaveOptions * pMultiSaveOptions; 
   IEpnExtraDcOptions * pExtraDcOptions; 
   IEPrint * pLeadPrnt; 
   IEpnMailMessageInfo * pMailMessageInfo; 
   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; 

   hr = ::CoCreateInstance(CLSID_EpnMailMessageInfo, NULL, CLSCTX_ALL, IID_IEpnMailMessageInfo, (void**) &pMailMessageInfo); 
   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";

   pMailMessageInfo->To = "someone@domain.com";
   pMailMessageInfo-> Subject = "Subject";
   pMailMessageInfo->Body = "Testing";
   pMailMessageInfo->EmailSaveOptionsIndex = 0; 

   hDC = pLeadPrnt->CreateEmailDC (TEST_PRINTER_NAME, NULL, pMailMessageInfo, 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(pMailMessageInfo) 
   {
      pMailMessageInfo->Release();
      pMailMessageInfo = NULL; 
   }

   if(pLeadPrnt) 
   {
      pLeadPrnt->Release();
      pLeadPrnt = NULL; 
   }
}