数据库打印

smallsix 2003-10-20 03:28:26
加精
我的数据库完成了 但是我想打印数据库中的表,并把查询结果打在表上。基本已实现功能,但是实际打印出来的与打印预览差别较大,除了变量能打印清晰外,其他都很模糊。我的部分代码如下:

extern CString qip,qmask,qgateway,qcn;//公有变量已在查询中被付值。

。。。。。

void CWisView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class



}

void CWisView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class


pDC->SetMapMode (MM_TWIPS) ;

CFont font;
font.CreateFont(-280,0,0,0,400,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_MODERN,"Arial");
CFont* pOldFont=(CFont*)(pDC->SelectObject(&font));
PrintPageHeader(pDC,pInfo);//打印页眉
PrintPage(pDC,pInfo);//打印页
PrintPageFooter(pDC);//打印页角


}

void CWisView::PrintPageHeader(CDC *pDC, CPrintInfo *pInfo)
{
CString str;
CPoint point(2500,-600);
pDC->TextOut(point.x,point.y,"西安智杰数码科技有限公司 Xi'an Wisdom digital Co.,Ltd");
TEXTMETRIC textMetric;
int y=-1000;
pDC->MoveTo(800,y);
pDC->LineTo(11000,y);
point+=CSize(1090,-820);
str.Format("自助清单打印机故障出工单");
pDC->TextOut(point.x,point.y,str);

}
void CWisView::PrintPageFooter(CDC *pDC)
{
CString str;
CPoint point(1300,-16000);
str.Format("-------Tel:029-8217053----029-8255952-----Fax:029-8215665-to-8001---------");
pDC->TextOut(point.x,point.y,str);



}

void CWisView::PrintPage(CDC *pDC, CPrintInfo *pInfo)
{
CString str;
TEXTMETRIC textMetric;

//大框架
pDC->MoveTo(700,-1800);
pDC->LineTo(700,-15500);
pDC->TextOut(800,-3500,qip);
。。。。。//省略中间部分,都是画出来的,代码较长
}

我考虑所见即所得,改动如下:
void CWisView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CView::OnPrepareDC(pDC, pInfo);
pDC->SetMapMode(MM_ANISOTROPIC); //转换坐标映射方式
CSize size = CSize(800, 560);
pDC->SetWindowExt(size); //确定窗口大小

//得到实际设备每逻辑英寸的象素数量
int xLogPixPerInch = pDC- >GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = pDC- >GetDeviceCaps(LOGPIXELSY);

//得到设备坐标和逻辑坐标的比例
long xExt = (long)size.cx * xLogPixPerInch/96 ;
long yExt = (long)size.cy * yLogPixPerInch/96 ;
pDC->SetViewportExt((int)xExt, (int)yExt);
//确定视口大小

}
但改动后打印预览不停的闪动。不知道何缘故??
望赐教!

...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
smallsix 2003-10-20
  • 打赏
  • 举报
回复
呵呵 已经差不多了 太谢谢了 Good Luck!
stonexl 2003-10-20
  • 打赏
  • 举报
回复
你可以自己写几个小函数代替MoveTo()、LineTo()和TextOut等函数。
如画线函数:
void DrawLine(CDC * pDC, int x1, int y1, int x2, int y2)
{
pDC->MoveTo(x1*m_cxRation, y1*m_cyRatio);
pDC->LineTo(x2*m_cxRation, y2*m_cyRatio); //应转化为int量
}
smallsix 2003-10-20
  • 打赏
  • 举报
回复
再次谢谢stonexl 经过你的指导 我在新建的工程中已经顺利打印出了 但是我的数据库表是我用MoveTo() 和LineTo()一下一下画的(我不知道怎么调用现成的表),如果每个都加上m_cxRatio 和m_cyRatio 那不是非常累!! 可否有其他方法 谢谢
stonexl 2003-10-20
  • 打赏
  • 举报
回复
我上边所写是打印的三个消息的映射函数。基本思路就是先得到两个比例(m_cxRatio、m_cyRatio),在打印中每个元件的坐标都与这两个比例关联。这样即使打印机发生变化,也不用改动程序。
smallsix 2003-10-20
  • 打赏
  • 举报
回复
打印出来问题如下:

变量和画出的方格基本正常,就是pDC->TextOut()出的字符打出来是黑墨块还带两边发毛的。

感觉象打印头来回不停的晃出来的 打印机没问题
stonexl 2003-10-20
  • 打赏
  • 举报
回复
你建立一个新的工程,在其中把简单的打印先调通后再合并到你的工程中去。
smallsix 2003-10-20
  • 打赏
  • 举报
回复
to:stonexl 谢谢你 当我按照你的方法进行改动,不知道什么原因,改动后程序无法启动,当我去掉OnPrepareDC()中代码后方可启动,但进入后,打印预览中的字符都变成了乱码,我去掉了最后的CWisView::OnPrint(pDC,pInfo); 才正常。这时发现又改回来了!!!
再一次请教
stonexl 2003-10-20
  • 打赏
  • 举报
回复
void CWsTreeView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
//得到打印比例(因打印机而异)
if (pDC->IsPrinting())
{
int cxPagePixels = pDC->GetDeviceCaps(HORZRES);
int cyPagePixels = pDC->GetDeviceCaps(VERTRES);

int cxPageMilliMeters = pDC->GetDeviceCaps(HORZSIZE);
int cyPageMilliMeters = pDC->GetDeviceCaps(VERTSIZE);

m_cxRatio = (double)cxPagePixels / ((double)cxPageMilliMeters * 3);
m_cyRatio = (double)cyPagePixels / ((double)cyPageMilliMeters * 3);
}

CTreeView::OnPrepareDC(pDC, pInfo);
}

BOOL CWsTreeView::OnPreparePrinting(CPrintInfo* pInfo)
{
BOOL Flag;

Flag = DoPreparePrinting(pInfo);

pInfo->SetMaxPage(1);

return Flag;
}

void CWsTreeView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
pOldFont = pDC->SelectObject(&m_Font);

PrnX = (int)((double)x * m_cxRatio);
PrnY = (int)((double)y * m_cyRatio);

pDC->TextOut(PrnX, PrnY, Text);

pDC->SelectObject(pOldFont);

CTreeView::OnPrint(pDC, pInfo);
}

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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