分享
 
 
 

如何在VC++中使用API直接打印

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

(说明:)这一段代码,用以演示《如何在VC++中使用API直接打印》。并且该段代码可以直接嵌入各种工程中,有实际使用的价值。

(用途:)在Visual C++中,应用程序通常是使用CView中提供的打印功能,在OnPrint()或OnDraw()中向打印机输出。但是对于对话框中的数据,或基于对话框的程序,打印成了一件繁琐的工作。

该段代码向用户提供了PrintListCtrl()函数,用于打印用户在对话框或FormView中的CListCtrl(控件必须是Report View 形式的)控件中的内容。在打印过程中,根据控件中每列标题的宽度计算打印输出时各列的宽度,并根据数据的行数自动分页。在本代码的基础上稍作修改,就可以适应各种数据的输出。

(用法:)该段代码使用Visual C++ 6.0, 使用Windows API来完成所需功能,使用时将本文本作为头文件使用。打印时直接调用PrintListCtrl(),函数的参数为所要打印的ListCtrl。?联系方法:lff@mail.wl.xj.cn

*///该结构用于存储各列的信息

typedef struct tagColAtt

{

int nColIndex;

CString strColText;

int nPrintX;

int nSubItemIndex;

}

COLATT;

BOOL PrintListCtrl(CListCtrl &list)

{

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;

CHeaderCtrl* pHeader = list.GetHeaderCtrl();

//获得行,列的个数

int nColCount = pHeader->GetItemCount();

int nLineCount = list.GetItemCount();

int ColOrderArray[100];

COLATT ca[100];

list.GetColumnOrderArray(ColOrderArray, nColCount);

int nColX =nXMargin*nCharWidth;

//检索各列的信息,确定列标题的内容长度。

for(int i =0 ; i< nColCount; i++)

{

ca[i].nColIndex = ColOrderArray[i];

LVCOLUMN lvc;

char text[100];

lvc.mask = LVCF_TEXT|LVCF_SUBITEM;

lvc.pszText = text;

lvc.cchTextMax = 100;

list.GetColumn(ca[i].nColIndex, &lvc);

ca[i].strColText = lvc.pszText;

ca[i].nSubItemIndex = lvc.iSubItem;

ca[i].nPrintX = nColX;

nColX += nCharWidth * strlen(ca[i].strColText);

if(nColX > nHorRes)

{

DeleteDC(pd.hDC);

AfxMessageBox("字段太多,无法在一行内打印,请试用较大的纸,或横向打印。");

return FALSE;

}

}

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);

//调整各列的宽度,以使各列在后面的打印输出时更均匀的打印在纸上。

int space = (nHorRes-nXMargin*nCharWidth-nColX) / (nColCount -1);

for(i =1; i<nColCount; i++)

{

ca[i].nPrintX += i*space;

}

//输出列标题

for(i =0; i<nColCount; i++)

TextOut(pd.hDC, ca[i].nPrintX, nYMargin,

ca[i].strColText, strlen(ca[i].strColText));

int nMaxLinePerPage = nVerRes/nCharHeight -3;

int nCurPage =1;

//输出各列的数据

for(i =0; i<nLineCount; i++)

{

for(int j =0; j<nColCount; j++)

{

if(i+1-(nCurPage-1)*nMaxLinePerPage > nMaxLinePerPage)

{

//新的一页

EndPage(pd.hDC);

StartPage(pd.hDC);

nCurPage ++;

}

CString subitem = list.GetItemText(i, ca[j].nSubItemIndex);

TextOut(pd.hDC, ca[j].nPrintX,nYMargin+(i+1-(nCurPage-1)*nMaxLinePerPage)*nCharHeight,subitem, strlen(subitem));

}

}

EndPage(pd.hDC);

EndDoc(pd.hDC);

//打印结束

DeleteDC(pd.hDC);

return TRUE;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有