编写打印功能遇到困难,实在解决不了,特来求助,急……

heroful 2006-06-07 04:54:37
打印分页问题:
vc/mfc默认提供的“打印预览”里面有一个按纽是“下一页”,但是当我要打印的东西超过一页时,那个“下一页”的按纽根本不起作用。那么要如何实现分页打印的功能呢?
...全文
134 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huacha 2006-06-08
  • 打赏
  • 举报
回复
WWW.wave12.com有打印控件
breezydzy 2006-06-08
  • 打赏
  • 举报
回复
Mark
lixiaosan 2006-06-08
  • 打赏
  • 举报
回复
http://www.codeproject.com/printing/enhancedprintpreview.asp
heroful 2006-06-07
  • 打赏
  • 举报
回复
以上代码是定义打印输出作用,其内容采用
memDC.MoveTo(rt2.right, rt2.top);
memDC.LineTo(rt2.right, rt2.bottom);移动顺序
heroful 2006-06-07
  • 打赏
  • 举报
回复
void CXcjc::OnXcjcPrint()
{
int nCount=m_ctlXcjcList.GetItemCount();
if(nCount<=0)
{
AfxMessageBox("没有要打印的内容!");
return;
}
CString strCdbh1,strCdbh2;
strCdbh1=_T("");
strCdbh2=_T("");
int j=0;
for(int i=0;i<nCount;i++)
{
strCdbh2=m_ctlXcjcList.GetItemText(i,0);
if(strCdbh1!=strCdbh2)
{
strCdbh1=strCdbh2;
j++;
}
}
PRNINFO PrnInfo = {0};
PrnInfo.hListView = m_ctlXcjcList.m_hWnd;
PrnInfo.hWnd = this->m_hWnd;
PrnInfo.IsPrint = FALSE;
PrnInfo.nCurPage = 1;
PrnInfo.nMaxLine = j*4;
if(m_strWtbh.GetLength()>1)
sprintf(PrnInfo.szTag,"%s",m_strWtbh.GetBuffer(1));
CPreParent DlgPreView;
DlgPreView.SetCallBackFun(DrawInfo, PrnInfo);
DlgPreView.DoModal();
}
void CXcjc::DrawInfo(CDC &memDC, PRNINFO PrnInfo)
{
if(memDC.m_hDC == NULL)
return;
int nCurPage = PrnInfo.nCurPage; //当前页
BOOL IsPrint = PrnInfo.IsPrint; //是否打印
int nMaxPage = PrnInfo.nCountPage; //最大页码
HWND hWnd = PrnInfo.hWnd;
HWND hList = PrnInfo.hListView;
CString csRFinality;
CString csLFinality;
csRFinality.Format("第 %i 页/共 %i 页", nCurPage, nMaxPage);

TCHAR szTitle[] = TEXT("现场检测采样记录");

CRect rc, rt1, rt2, rt3, rt4, rt5, rt6,rt7, rt8, rt9,rt10,rt11,rt12,rt13,rt14,rt15,rt16,rt17,rt18,rt19,rt20;
CPen *hPenOld;
CPen cPen;
CFont TitleFont, DetailFont, *oldfont;
//取数据
if(!db.IsOpen())
{
AfxMessageBox("数据库非正常断开,请退出后重新登陆!");
return;
}
CString strJzrq,strOper,strYqmc,strXd,strGdbh,strWtbh,strCydz;
strWtbh.Format("%s",PrnInfo.szTag);
CRecordset rs(&db);
rs.Open(AFX_DB_USE_DEFAULT_TYPE,
"select xcjcrq,oper,xcxd,xcgdbh,xcjc_cydz from tb_jzjl_base where wtID='"+strWtbh+"'");
if(!rs.IsEOF())
{
rs.GetFieldValue("xcjcrq", strJzrq);
csLFinality.Format("%s%s","校正日期:",strJzrq);
rs.GetFieldValue("oper", strOper);
rs.GetFieldValue("xcxd", strXd);
rs.GetFieldValue("xcgdbh", strGdbh);
rs.GetFieldValue("xcjc_cydz", strCydz);
}
rs.Close(); //标题字体
TitleFont.CreateFont(-MulDiv(14,memDC.GetDeviceCaps(LOGPIXELSY),72),
0,0,0,FW_NORMAL,0,0,0,GB2312_CHARSET,
OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
VARIABLE_PITCH|FF_SWISS,_T("黑体"));
//细节字体
DetailFont.CreateFont(-MulDiv(10,memDC.GetDeviceCaps(LOGPIXELSY),72),
0,0,0,FW_NORMAL,0,0,0,GB2312_CHARSET,
OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
VARIABLE_PITCH|FF_SWISS,_T("宋体"));
//粗笔
cPen.CreatePen(PS_SOLID, 2, RGB(0, 0, 0));

int xP = GetDeviceCaps(memDC.m_hDC, LOGPIXELSX); //x方向每英寸像素点数
int yP = GetDeviceCaps(memDC.m_hDC, LOGPIXELSY); //y方向每英寸像素点数

int xPix = xP*10/240; //每 mm 宽度的像素
int yPix = yP*10/240; //每 mm 高度的像素
int fAdd = 5*yPix; //每格递增量
int nTitle=10*fAdd;
int nTop = 2*fAdd; //第一页最上
int nLeft = 15*xPix; //最左线
int nRight = xPix*(B5_W-20); //最右线
int nBottom = nTop+B5_ONELINE*fAdd;//底
int nTextAdd = 2*xPix;//文字起始位置
int iStart = (nCurPage - 1)*40;
这段代码是起打印输出作用,不知如何起到打印换页作用?
livedeal 2006-06-07
  • 打赏
  • 举报
回复
在OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)里设置打印的页数
pInfo->SetMaxPage (nMaxPage);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧