读书人

关于餐饮打印机(pos58)的有关问题

发布时间: 2012-03-24 14:00:46 作者: rapoo

关于餐饮打印机(pos58)的问题
我是用的MFC打印机制做的 然后重载了onprint函数 因为我是基于对话框的程序 然后在view类里面重载OnPrint()函数 并且把在这个里面把
如下:

C/C++ code
void CPrintView::OnPrint(CDC* pDC, CPrintInfo* pInfo)  {    CFont *pOldFont;    CFont DataFont;    DataFont.CreatePointFont(120,"宋体",pDC);    pOldFont=pDC->SelectObject(&DataFont);    pDC->Rectangle(......);    return TRUE;


这个我就是画了个巨型 Rectangle里面那些参数是我前面设置的 反正就是用pDC->Rectangle()画了个矩形;
问题是 我在打印预览的时候 看到我这个巨型占整个预览的很上面 下面茫茫多都是空白
也就是说预览的时候 就是预览成一张纸上面画了个矩形,这个矩形在整个这张上面的最上面 占整个纸的很少一部分 然后我在整个过程当中“没有”设置纸张的大小(关键是我不晓得怎么设置) 以达到我有好多信息就打好多出来,因为毕竟是pos打印机 宽度是恒定的 但是长嘛就应该是有好多行信息就打好长的纸出来吧,不像一般的打印机 反正A4纸是固定的

问题是 我没有任何设置 这个打印机怎么知道我这个矩形画完了 然后下面的空白部分它就不打印了 然后停住了 虽然这个正和我意 但是我翻遍了MFC的书都没有看到这个是怎么回事~~~


问题2:反过来我画一个很长很长的矩形 执行打印预览的时候 预览框上的一张纸都装不完 打印出来也和预览框上面的一样装不完 但是它怎么就不继续打印那装不下的一部分了呢?就是剩余没打完的矩形啊?


我继续重载了

void CPrintView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
pInfo->SetMaxPage (4);
}
设置为4页 这样一来通过MFC的打印原理 会执行4次OnPrint()函数,然后在OnPrint()里面画一个短一点的矩形,也就是在打印预览里面一张纸能装下的那种 然后确实能打出4个矩形来 而且通过打印时候那个WINDOWS自带的对话框来看确实是打了一个再打第二个

问题3:按照打印预览里面看的 一个矩形打完后 那张纸还剩下面茫茫多的空白 然后再是第二张纸上面又是一个矩形 以此类推 按照我的理解应该是把那第一张纸下面的空白走完了再继续打第二张纸上面的矩形 但是事实是第一个矩形打完了 然后空点点空白马上就打第二个矩形了 然后直到把所有的矩形全部打完~~~ 这样貌似还给我节约了 本来我的要求也就是这样的 但是为什么??它怎么不把纸走完了再打第二个矩形???


问题4:我想问题的关键是出在“打印预览”上面 书上说 打印预览是很完善的 都不需要我们去重载什么函数了 我也就没重载什么东西 但是我想知道 它是怎么来设置那张纸的?它怎么通过打印机来设置预览上面那张纸的宽度 高度? 是通过CDC::GetDeviceCaps()么?在我的程序里面从来没有设置过纸的高度宽度什么的.....

下面是我自己的看法 麻烦各位看看小弟我是否正确


最后我觉得 这个POS58打印机 是不是本身在硬件上就设定为没有要打印的东西的时候 它就自动停下来了

我感觉这个打印机也是要分页的 虽然这个纸装在里面有30米左右长度 但是从打印预览看出他还是要分页的 虽然宽度是固定 但是这一页很长~~通过前面的经验算下来 可能有半米左右吧 如果信息多了的话 半米都装不完的话 那么在OnPrient()里面还是要设置 第一页打什么 第二页打什么 至于有多少页 那么事先就要设个变量算好 int nPage; 然后在OnBeginPrinting()里面设置好最大页码数 并且在OnPrint() 里面做相应更改

C/C++ code
void CPrintView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) {      pInfo->SetMaxPage (nPage);}void CPrintView::OnPrint(CDC* pDC, CPrintInfo* pInfo) {      int nPageNumber = pInfo->m_nCurPage;      if(nPageNumber==1)      {           //第一页打印的类容       }      if(nPageNumber==2)      {           //第二页打印的类容       }      .........}

这样来实现 不过在OnPrint() 里面只能靠if来判断该打印些什么 不能动态的弄~~~ 我曾今看过超市的员工就用这种打印机打报表 那个纸要多长有多长 不知道那个软件是怎么完成的 而且如果按照我们这种看法分页的话 那个页与页的衔接真的是天衣无缝的 不知道是怎么弄的


以上都是自己的看法 麻烦各位给个意见~~~~

[解决办法]
一般打印驱动都会针对常用的DC操作做优化的,所以在pDC指向一个打印机DC的时候,打印机执行的打印指令是Rectangle而不是画图。

读书人网 >VC/MFC

热点推荐