1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
|
//#########################################################################################
//#########################################################################################
//#########################################################################################
bool CGeschaeftsadressen::GetPrinterDevice(LPTSTR pszPrinterName, HGLOBAL* phDevNames, HGLOBAL* phDevMode)
{// if NULL is passed, then assume we are setting app object's
// devmode and devnames
if (phDevMode == NULL || phDevNames == NULL)
{
MessageBox("EPSON LQ-680Pro Port 2 Wiegekarte-1error");
return FALSE;
}
// Open printer
HANDLE hPrinter;
if (OpenPrinter(pszPrinterName, &hPrinter, NULL) == FALSE)
{
MessageBox("EPSON LQ-680Pro Port 2 Wiegekarte-2error");
return FALSE;
}
// obtain PRINTER_INFO_2 structure and close printer
DWORD dwBytesReturned, dwBytesNeeded;
GetPrinter(hPrinter, 2, NULL, 0, &dwBytesNeeded);
PRINTER_INFO_2* p2 = (PRINTER_INFO_2*)GlobalAlloc(GPTR,
dwBytesNeeded);
if (GetPrinter(hPrinter, 2, (LPBYTE)p2, dwBytesNeeded,&dwBytesReturned) == 0)
{
GlobalFree(p2);
ClosePrinter(hPrinter);
MessageBox("EPSON LQ-680Pro Port 2 Wiegekarte-3error");
return FALSE;
}
ClosePrinter(hPrinter);
// Allocate a global handle for DEVMODE
HGLOBAL hDevMode = GlobalAlloc(GHND, sizeof(*p2->pDevMode) + p2->pDevMode->dmDriverExtra);
ASSERT(hDevMode);
DEVMODE* pDevMode = (DEVMODE*)GlobalLock(hDevMode);
ASSERT(pDevMode);
// copy DEVMODE data from PRINTER_INFO_2::pDevMode
memcpy(pDevMode, p2->pDevMode, sizeof(*p2->pDevMode) + p2->pDevMode->dmDriverExtra);
GlobalUnlock(hDevMode);
// Compute size of DEVNAMES structure from PRINTER_INFO_2's data
DWORD drvNameLen = lstrlen(p2->pDriverName)+1; // driver name
DWORD ptrNameLen = lstrlen(p2->pPrinterName)+1; // printer name
DWORD porNameLen = lstrlen(p2->pPortName)+1; // port name
// Allocate a global handle big enough to hold DEVNAMES.
HGLOBAL hDevNames = GlobalAlloc(GHND, sizeof(DEVNAMES) +(drvNameLen + ptrNameLen + porNameLen)*sizeof(TCHAR));
ASSERT(hDevNames);
DEVNAMES* pDevNames = (DEVNAMES*)GlobalLock(hDevNames);
ASSERT(pDevNames);
// Copy the DEVNAMES information from PRINTER_INFO_2
// tcOffset = TCHAR Offset into structure
int tcOffset = sizeof(DEVNAMES)/sizeof(TCHAR);
ASSERT(sizeof(DEVNAMES) == tcOffset*sizeof(TCHAR));
pDevNames->wDriverOffset = tcOffset;
memcpy((LPTSTR)pDevNames + tcOffset, p2->pDriverName,drvNameLen*sizeof(TCHAR));
tcOffset += drvNameLen;
pDevNames->wDeviceOffset = tcOffset;
memcpy((LPTSTR)pDevNames + tcOffset, p2->pPrinterName,ptrNameLen*sizeof(TCHAR));
tcOffset += ptrNameLen;
pDevNames->wOutputOffset = tcOffset;
memcpy((LPTSTR)pDevNames + tcOffset, p2->pPortName,porNameLen*sizeof(TCHAR));
pDevNames->wDefault = 0;
GlobalUnlock(hDevNames);
GlobalFree(p2); // free PRINTER_INFO_2
// set the new hDevMode and hDevNames
*phDevMode = hDevMode;
*phDevNames = hDevNames;
return TRUE;
}
//#########################################################################################
//#########################################################################################
//#########################################################################################
HANDLE CGeschaeftsadressen::CopyHandle(HANDLE h)
{
// Return a handle to a copy of the data
// that the passed handle was for.
if (!h) return NULL;
BYTE* lpCopy;
BYTE* lp;
HANDLE hCopy;
DWORD dwLen = GlobalSize(h);
if (hCopy = GlobalAlloc(GHND, dwLen))
{
lpCopy = (BYTE*)GlobalLock(hCopy);
lp = (BYTE*)GlobalLock(h);
CopyMemory(lpCopy,lp,dwLen);
GlobalUnlock(hCopy);
GlobalUnlock(h);
}
return hCopy;
}
//#########################################################################################
//#########################################################################################
//#########################################################################################
void CGeschaeftsadressen::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
//Druckbereich in 0,1mm
pDC->SetMapMode(MM_LOMETRIC);
//--------------------------------------
pInfo->SetMaxPage(1);
//--------------------------------------
//--------------- Neue Schrift erstellen ------------------
//ASSERT(m_fontUeberschrift==0);
m_fontUeberschrift= new CFont;
//ASSERT(m_fontUeberschrift);
m_fontUeberschrift->CreateFont(-80,
0,
0,
0,
600,
0,
0,
0,
DEFAULT_CHARSET,
OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_DONTCARE,
"Arial");
//----------------------------------------------------------
}
//#########################################################################################
//#########################################################################################
//#########################################################################################
void CGeschaeftsadressen::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
//Druckbereich in 0,1mm
pDC->SetMapMode(MM_LOMETRIC);
//obwohl dies schon in OnBeginPrinting steht
//ist es immer eine gute Idee es nochmal zuschreiben
CString A;
CString str;
//-------------- Aktuelle Seite -------------------
CString Aktuelle_Seite;
Aktuelle_Seite.Format("Seite: %d",pInfo->m_nCurPage);
//-------------------------------------------------
// str.Format("%d",Anzahl);
CFont* pOldFont = pDC->SelectObject(m_fontUeberschrift);
pDC->TextOut(100,-100,"Geschäftsadresse");
pDC->SelectObject(pOldFont);
pDC->TextOut(1700,-100,Aktuelle_Seite);
//--------------------------
pDC->MoveTo(100,-230);
pDC->LineTo(1900,-230);
//--------------------------
pDC->TextOut(100,-240,"Adress-Nr :");
pDC->TextOut(100,-300,"Firmenname1:");
pDC->TextOut(100,-360,"Firmenname2:");
pDC->TextOut(100,-420,"Strasse :");
pDC->TextOut(100,-480,"Plz Strasse:");
pDC->TextOut(100,-540,"Ort :");
pDC->TextOut(100,-600,"Land :");
pDC->TextOut(100,-660,"E-mail :");
pDC->TextOut(100,-720,"Internet :");
//--------------------------
// pDC->MoveTo(100,-280);
// pDC->LineTo(1900,-280);
//--------------------------
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
//------------- Letzte Seite ermitteln ------------
UINT nEndPage = pInfo->m_nCurPage;
if(nEndPage==pInfo->GetMaxPage())
{
//pDC->SelectObject(pOldFont);
//pDC->TextOut(100,-600,"Letzte Seite");
}
//-------------------------------------------------
//------------- Erste Seite ermitteln ------------
UINT nStartPage = pInfo->m_nCurPage;
if(nStartPage==pInfo->GetMinPage())
{
//pDC->SelectObject(pOldFont);
//pDC->TextOut(100,-600,"Erste Seite");
}
//-------------------------------------------------
}
//#########################################################################################
//#########################################################################################
//#########################################################################################
void CGeschaeftsadressen::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
delete m_fontUeberschrift;
m_fontUeberschrift=NULL;
}
//#########################################################################################
//#########################################################################################
//#########################################################################################
void CGeschaeftsadressen::OnBnClickedButtonGeschaeftsadressen_Drucken_Kunden_Lieferanten_Einzeln()
{
CPrintDialog dlgPrint(FALSE,PD_PAGENUMS|PD_USEDEVMODECOPIESANDCOLLATE,this);
if(dlgPrint.DoModal()==IDOK)
{
CDC dc;
dc.Attach(dlgPrint.GetPrinterDC());
dc.m_bPrinting=TRUE;
//-------------------------- DEVMODE ---------------------------------------
LPDEVMODE dev=dlgPrint.GetDevMode();
GlobalUnlock(dev);
dev->dmOrientation=DMORIENT_PORTRAIT; //Hochformat
dev->dmPaperSize=DMPAPER_A4;
// dev->dmPaperSize=DMPAPER_A5;
// dev->dmPaperLength=1020;
// dev->dmPaperWidth=1480;
dev->dmCopies=dlgPrint.GetCopies();
dev->dmDefaultSource=DMBIN_AUTO;
//Wichtig !!!dmFields setzen
dev->dmFields |=DM_PAPERLENGTH|DM_PAPERWIDTH|DM_ORIENTATION|DM_DEFAULTSOURCE;
dc.ResetDC(dev);
dlgPrint.m_pd.Flags &= ~PD_RETURNDC; // Reset flag set by constructor.
//-------------------------------------------------------------------------
DOCINFO Print;
memset( &Print, 0, sizeof(DOCINFO) );
Print.cbSize = sizeof (DOCINFO);
Print.lpszDocName = "Drucken im Dialog";
Print.lpszOutput = (LPTSTR) NULL;
Print.lpszDatatype = (LPTSTR) NULL;
Print.fwType = 0;
//-----------------------------------
BOOL bPrintingOK = dc.StartDoc(&Print);
CPrintInfo pInfo;
pInfo.m_rectDraw.SetRect(0,0,dc.GetDeviceCaps(HORZRES), dc.GetDeviceCaps(VERTRES));
//~~~~~~~~~~~~~~~~~~~~~~~~~
OnBeginPrinting(&dc,&pInfo); // call prepare
//~~~~~~~~~~~~~~~~~~~~~~~~~
//==============================================================================
for(UINT page=pInfo.GetMinPage();page<=pInfo.GetMaxPage() &&bPrintingOK ; page++)
{
//begin a new page
dc.StartPage();
pInfo.m_nCurPage=page;
//~~~~~~~~~~~~~~~~~~~~~~~~~
OnPrint(&dc,&pInfo); // call Print your Page
//~~~~~~~~~~~~~~~~~~~~~~~~~
bPrintingOK=(dc.EndPage()>0);
}
//==============================================================================
//~~~~~~~~~~~~~~~~~~~~~~~~~
OnEndPrinting(&dc,&pInfo); // call your clean up
//~~~~~~~~~~~~~~~~~~~~~~~~~
if(bPrintingOK)
{
dc.EndDoc();
}
else
{
dc.AbortDoc();
}
dc.DeleteDC();
}
|