StartDoc fails in VC++ Applications

If you are a C/C++/C# developer and have any questions about using our products from your application here is the place to post them.
Post Reply
Riccardone
Posts: 7
Joined: Fri Dec 17 2004

StartDoc fails in VC++ Applications

Post by Riccardone »

This vc++ code try to save rtf file in PDF.
I'm using my personal editor (CWritexTB) and before printing StatDoc of this editor always fails.

void CDlgGestDoc::OnSavepdf()
{
if ( !m_pCurrentDoc )
return;

CString csFile = m_pCurrentDoc->GetPath();
CString csNomeFilePdf = csFile.Left(csFile.ReverseFind('.'))+ ".pdf";

BROWSEINFO bi; ::ZeroMemory(&bi,sizeof(bi));
bi.ulFlags=BIF_RETURNONLYFSDIRS;
bi.lpszTitle = "Selezionare la cartella dove salvare il file pdf";
LPCITEMIDLIST lpcidLista = SHBrowseForFolder(&bi);

CString csTmp;
if ( lpcidLista )
{
SHGetPathFromIDList(lpcidLista, csTmp.GetBuffer(_MAX_PATH));
csTmp.ReleaseBuffer();

if ( csTmp.IsEmpty() )
{
MSG_INF("Nessuna cartella selezionata, file non salvato");
return;
}

m_hPDF.Create("", WS_CHILD, CRect(0,0,0,0), this, 10000001);
m_hPDF.DriverInit("Amyuni Document Converter");
m_hPDF.EnablePrinter("company", "code");

VERIFY(m_hPDF.SetDefaultPrinter());

m_hPDF.SetFileNameOptions(3 + 0x20);
m_hPDF.SetDefaultFileName(csTmp+csNomeFilePdf);
m_hPDF.CaptureEvents(TRUE);

CWritexTB hWx;
hWx.Create("",WS_CHILD,CRect(0,0,0,0),this,10000002);
hWx.CloseFile();
hWx.OpenFile(GetTemplateFilePath()+csFile);

LPDEVNAMES hDevNames;
LPDEVMODE hDevMode;
TCHAR sz[256]; strcpy(sz,"Amyuni Document Converter");
GetPrinterDevice(sz,(HGLOBAL*)&hDevNames,(HGLOBAL*)&hDevMode);
hWx.ChangeSystemPrinter((long)::GlobalLock(hDevNames),(short)::GlobalSize(hDevNames),(long)::GlobalLock(hDevMode),(short)::GlobalSize(hDevMode));

hWx.PrintDirect();
hWx.DestroyWindow();

VERIFY(m_hPDF.RestoreDefaultPrinter());
m_hPDF.DriverEnd();
m_hPDF.DestroyWindow();
}
}


What I have to do?
This is the right way?

Thanks
Riccardone
Posts: 7
Joined: Fri Dec 17 2004

Re: StartDoc fails in VC++ Applications

Post by Riccardone »

Riccardone wrote:This vc++ code try to save rtf file in PDF.
I'm using my personal editor (CWritexTB) and before printing StatDoc of this editor always fails.

void CDlgGestDoc::OnSavepdf()
{


m_hPDF.Create("", WS_CHILD, CRect(0,0,0,0), this, 10000001);
m_hPDF.DriverInit("Amyuni Document Converter");
m_hPDF.EnablePrinter("company", "code");

VERIFY(m_hPDF.SetDefaultPrinter());

m_hPDF.SetFileNameOptions(3 + 0x20);
m_hPDF.SetDefaultFileName(csTmp+csNomeFilePdf);
m_hPDF.CaptureEvents(TRUE);

CWritexTB hWx;
hWx.Create("",WS_CHILD,CRect(0,0,0,0),this,10000002);
hWx.CloseFile();
hWx.OpenFile(GetTemplateFilePath()+csFile);

LPDEVNAMES hDevNames;
LPDEVMODE hDevMode;
TCHAR sz[256]; strcpy(sz,"Amyuni Document Converter");
GetPrinterDevice(sz,(HGLOBAL*)&hDevNames,(HGLOBAL*)&hDevMode);
hWx.ChangeSystemPrinter((long)::GlobalLock(hDevNames),(short)::GlobalSize(hDevNames),(long)::GlobalLock(hDevMode),(short)::GlobalSize(hDevMode));

hWx.PrintDirect();
hWx.DestroyWindow();

VERIFY(m_hPDF.RestoreDefaultPrinter());
m_hPDF.DriverEnd();
m_hPDF.DestroyWindow();
}
}


What I have to do?
This is the right way?

Thanks
Joan
Amyuni Team
Posts: 2799
Joined: Wed Sep 11 2002
Contact:

Post by Joan »

Hello,

Please add a call to EnablePrinter() right before printing.

Hope this helps.
Riccardone
Posts: 7
Joined: Fri Dec 17 2004

Post by Riccardone »

Hallo Joan!
I try to apply one more EnablePrinter to my code...

{
.
.
.
// Init my pdf printer
m_hPDF.Create("", WS_CHILD, CRect(0,0,0,0), this, 10000001);
m_hPDF.DriverInit("Amyuni Document Converter");
m_hPDF.EnablePrinter("company", "activation");
VERIFY(m_hPDF.SetDefaultPrinter());

m_hPDF.SetFileNameOptions(3 + 0x20);
m_hPDF.SetDefaultFileName(csTmp+csNomeFilePdf);
m_hPDF.CaptureEvents(TRUE);

// Create my editor
CWritexTB hWx;
hWx.Create("",WS_CHILD,CRect(0,0,0,0),this,10000002);
hWx.CloseFile();
hWx.OpenFile(GetTemplateFilePath()+csFile);

HGLOBAL hDN = AfxGetDbApp()->GetDevNames();
HGLOBAL hDM = NULL;
hWx.ChangeSystemPrinter((long)::GlobalLock(hDN), (short)::GlobalSize(hDN),(long)::GlobalLock(hDM), (short)::GlobalSize(hDM));
::GlobalUnlock(hDN); ::GlobalUnlock(hDM);

// Your suggestion...
m_hPDF.EnablePrinter("company", "activation");
hWx.PrintDirect();
hWx.DestroyWindow();

VERIFY(m_hPDF.RestoreDefaultPrinter());
m_hPDF.DestroyWindow();
.
.
.
}

I have a function the get the fire message EnablePrinterPre() before printing, in this function call again the EnablePrinter(...)
But the priter doesn't work and I still have the errore in StartDoc(...)

Thanks in advanced.
Riccardo
Riccardone
Posts: 7
Joined: Fri Dec 17 2004

Post by Riccardone »

Hallo!
The problem is gone! Everythings is all right.
This mistake was very stupid, and simple! Was an error in the code activation... :shock:

Thank you very much!

Riccardo
Post Reply