WEB开发网
开发学院软件开发VC VC5打印字体的控制 阅读

VC5打印字体的控制

 2008-11-13 19:32:24 来源:WEB开发网   
核心提示: 接着,取得当前打印纸的宽度和高度,VC5打印字体的控制(2),再根据新字体的宽度和高度计算出每行的最大字符数和每页的最大行数, 由于打印文件中有些行的宽度可能超过每行的最大字符数,程序中计算并设置所需的打印页数,OnBeginPrinting()函数实现如下: OnBeginPrinti

---- 接着,取得当前打印纸的宽度和高度,再根据新字体的宽度和高度计算出每行的最大字符数和每页的最大行数。

---- 由于打印文件中有些行的宽度可能超过每行的最大字符数,所以程序中调用函数RedealTextData() 对打印文件进行重新整理,函数的实现在下面介绍。

---- 最后,程序中计算并设置所需的打印页数。

OnBeginPrinting()函数实现如下:

//====================================
// OnBeginPrinting
//====================================
void CTestView::OnBeginPrinting(CDC* pDC,
CPrintInfo* pInfo)
{
//设置新的? 字体////////////////
//取打印机的横方向和纵方向的分辨率
//即每英寸点数
short cxInch = pDC- >GetDeviceCaps(LOGPIXELSX);
short cyInch = pDC- >GetDeviceCaps(LOGPIXELSY);
// 取当前字体大小
CFont *curFont = pDC- >GetCurrentFont();
LOGFONT curLogFont;
LOGFONT newLogFont;
curFont- >GetLogFont( &curLogFont );
long NewFontWidth = curLogFont.lfWidth;
long NewFontHeight = curLogFont.lfHeight;
newLogFont = curLogFont;
//计算新的字体大小--缩小一倍
newLogFont.lfWidth =(long)((float)NewFontWidth/2.0
* ((float)cxInch / 72.0));
newLogFont.lfHeight =(long)((float)NewFontHeight/2.0
* ((float)cyInch / 72.0));
//创建并设置新的字体,保留以前的字体
CFont newFont;
CFont *oldFont;
newFont.CreateFontIndirect(&newLogFont);
oldFont = pDC- >SelectObject(&newFont );
/////////////////////////////////
//根据字体宽度、高度计算
//每行最大字数及每页最大行数
//取打印纸张高度和宽度
int nPageHeight, nPageWidth;
nPageHeight = pDC- >GetDeviceCaps(VERTRES);
nPageWidth = pDC- >GetDeviceCaps(HORZRES);
TEXTMETRIC TextM;
pDC- >GetTextMetrics(&TextM);
//字体高度
m_LineHeight = (unsigned short)TextM.tmHeight;
//字体平均宽度
m_CharWidth=(unsigned short)
TextM.tmAveCharWidth;
//每行最大字数
m_MaxLineChar = nPageWidth / m_CharWidth - 8;
//每页最大行数
m_LinesPerPage = nPageHeight/ m_LineHeight;
//根据每行最大字数对文字进行重新调整
RedealTextData();
//////////////////////////////////////
//计算所需打印纸张数目
int nPrintableLineCount = INT_MAX/m_LineHeight;
// m_lines为文件总行数
if (m_lines < nPrintableLineCount)
nPrintableLineCount = m_lines;
unsigned short MaxPage = (nPrintableLineCount
+ m_LinesPerPage - 1)
/ m_LinesPerPage;
//设置所需打印纸张数目
pInfo- >SetMaxPage(MaxPage);
pInfo- >m_nCurPage = 1;
//////////////////////////////////////////
//最后不要忘记将字体还原,这一句是必需的
pDC- >SelectObject(oldFont );
}

上一页  1 2 3 4  下一页

Tags:VC 打印 字体

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接