⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print.h

📁 ACCESS数据库+MFC编写的学生数据库管理系统
💻 H
字号:
//该结构用于存储各列的信息
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,j);
		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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -