建议使用OFFICE 里面的 MS Office Document Imaging 测试。在打印-》选择打印机时选择MS Office
Document Imaging writer,即可看到打印效果。
BOOL PrintListCtrl()
{
PRINTDLG pd;
pd.lStructSize = sizeof(PRINTDLG);
pd.Flags = PD_RETURNDC;
pd.hDC = NULL;
pd.hwndOwner = NULL;
pd.hInstance = NULL;
pd.nMaxPage = 1;
pd.nMinPage = 1;
pd.nFromPage = 1;
pd.nToPage = 1;
pd.nCopies = 1;
pd.hDevMode = NULL;
pd.hDevNames = NULL;
//显示打印对话框,由用户来设定纸张大小等。
if(!PrintDlg(&pd)) return FALSE;
ASSERT(pd.hDC!=NULL);
int nHorRes = GetDeviceCaps(pd.hDC, HORZRES);
int nVerRes = GetDeviceCaps(pd.hDC, VERTRES);
int nXMargin = 2;
int nYMargin = 2;
TEXTMETRIC tm;
GetTextMetrics(pd.hDC, &tm);
int nCharHeight = tm.tmHeight;
int nCharWidth = tm.tmAveCharWidth;
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "ListCtrl Data Printing";
di.lpszOutput = (LPTSTR) NULL;
di.lpszDatatype = (LPTSTR) NULL;
di.fwType = 0;
StartDoc(pd.hDC, &di);
StartPage(pd.hDC);
TextOut(pd.hDC, 10,10,"test",4);
EndPage(pd.hDC);
EndDoc(pd.hDC);
DeleteDC(pd.hDC);
return TRUE;
}
CFont font;
CDC *dc = CDC::FromHandle (pd.hDC);
VERIFY(font.CreatePointFont(80, "Courier", dc));
CFont* def_font = dc->SelectObject(&font);
设置打印输出字体
BOOL PrintListCtrl()
{
FILE * fp;
char buf[1024];
if((fp=fopen("f://prt.txt","rt"))==NULL) return 0;
PRINTDLG pd;
pd.lStructSize = sizeof(PRINTDLG);
pd.Flags = PD_RETURNDC;
pd.hDC = NULL;
pd.hwndOwner = NULL;
pd.hInstance = NULL;
pd.nMaxPage = 1;
pd.nMinPage = 1;
pd.nFromPage = 1;
pd.nToPage = 1;
pd.nCopies = 1;
pd.hDevMode = NULL;
pd.hDevNames = NULL;
//显示打印对话框,由用户来设定纸张大小等。
if(!PrintDlg(&pd)) return FALSE;
ASSERT(pd.hDC!=NULL);
CFont font;
CDC *dc = CDC::FromHandle (pd.hDC);
VERIFY(font.CreatePointFont(80, "Courier", dc));
CFont* def_font = dc->SelectObject(&font);
int nHorRes = GetDeviceCaps(pd.hDC, HORZRES);
int nVerRes = GetDeviceCaps(pd.hDC, VERTRES);
int nXMargin = 200;
int nYMargin = 300;
TEXTMETRIC tm;
GetTextMetrics(pd.hDC, &tm);
int nCharHeight = tm.tmHeight;
int nCharWidth = tm.tmAveCharWidth;
int x = nXMargin ,y=nYMargin;
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = " Data Printing";
di.lpszOutput = (LPTSTR) NULL;
di.lpszDatatype = (LPTSTR) NULL;
di.fwType = 0;
StartDoc(pd.hDC, &di);
StartPage(pd.hDC);
while(fgets(buf, 1024,fp ))
{
TextOut(pd.hDC, x,y,buf,strlen(buf)-1);
y+=nCharHeight;
if(y>nVerRes-nYMargin*2)
{
EndPage(pd.hDC);
EndDoc(pd.hDC);
y=nYMargin;
StartDoc(pd.hDC, &di);
StartPage(pd.hDC);
}
}
EndPage(pd.hDC);
EndDoc(pd.hDC);
DeleteDC(pd.hDC);
fclose(fp);
return TRUE;
}