网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
VC5打印字体的控制
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式


//每行最大字数
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 );
}
---- RedealTextData 函数根据每行最大宽度对文件进行重新调整。主要是计算文件中每行的宽度,如果超过最大宽度则加入换行符(0x0d,0x0a)。函数实现如下:


//=======================================
// RedealTextData
//注:
//pDoc- >buffer为文件缓冲区
//pDoc- >file_length为文件字节长度
//pDoc- >TextLines为文件原行数
//pDoc- >MaxLineLength为文件原最大行字节宽度
//=======================================
void CTextView::RedealTextData()
{
CDocViewDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

short LineLengthMax = m_MaxLineChar;
unsigned short lines=0;
unsigned long i,j;

//申请新的缓冲区保存调整后的文件
long size = pDoc- >file_length + pDoc- >TextLines*
(pDoc- >MaxLineLength/m_MaxLineChar+1);
m_newBuffer = new char [size ];
LPSTR newTempPtr = m_newBuffer;
m_file_length =pDoc- >file_length;
//保存文件新的行数
m_lines = 1;
i = 0;
//记录当前行的宽度
short theLineLength=0;
//记录当前行中汉字字节数,
//以防止将一半汉字分为两行
unsigned short halfChinese=0;

while(i < pDoc- >file_length)
{
*newTempPtr++ = pDoc- >buffer[i];

j=i+1;
if( (pDoc- >buffer[i] == 0x0d && pDoc- >buffer[j] == 0x0a))
{
m_lines++;
theLineLength = 0;
}
else
{
//如果是TAB字符,宽度加8
if(pDoc- >buffer[i] == VK_TAB)
theLineLength += 8;
else
{
//大于0xa1的字节为汉字字节
if((unsigned char)pDoc- >buffer[i] >= 0xa1)
halfChinese++;
theLineLength++;
}
//如果行宽大于每行最大宽度,进行特殊处理
if(theLineLength > LineLengthMax)
{
char buff[256];
short m=255;
newTempPtr--;
if((unsigned char )*newTempPtr < 0xa1)
{
//如果当前字符的前一个字符是数字、
//字母或一些特殊的前置符号时,
//指针循环向前取,
//以防止将一个单词分为两行。
while((*newTempPtr >=0 && *newTempPtr< =9)||
(*newTempPtr >=a && *newTempPtr < = z) ||
(*newTempPtr >=A && *newTempPtr < = Z) ||
*newTempPtr == _ || *newTempPtr == * ||
*newTempPtr == ^ || *newTempPtr == ~ )
buff[m--] = *newTempPtr--;
}
else //汉字
{
//防止将一个汉字分为两行。
if(halfChinese%2)
buff[m--] = *newTempPtr--;
}
newTempPtr++;
//加入换行符,分为两行
*newTempPtr++ = 0x0d;
*newTempPtr++ = 0x0a;
for(short k=m+1; k< 256; k++)
*newTempPtr++ = buff[k];

m_lines++;
theLineLength = 0;
m_file_length += 2;
}
}
i++;
}
}
---- 三、实现OnPrint 函数

---- 在OnPrint 函数中实现真正的文字输出,主要功能包括设置打印字体大小,计算当前页号文字输出位置,以及文字的输出打印。

---- 程序中首先计算打印区域,文字在这个打印区域内输出。然后设置新的打印字体。

--

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号