PTR_PrintText,使用GDI打印输出文本

原创 2006年05月20日 03:40:00


// 使用GDI打印输出文本
int WINAPI PTR_PrintText(LPCSTR szDocName, LPBYTE pBuf, int iLen)
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());

 CDC printdc;
 CPrintDialog dlg(FALSE, PD_NOPAGENUMS|PD_NOSELECTION);
 
 dlg.GetDefaults();
 {
  CDC dc;
  DOCINFO di;

  dc.Attach(dlg.GetPrinterDC());//把打印设备环境附加到DC对象
  ::ZeroMemory (&di, sizeof (DOCINFO));
  di.cbSize = sizeof(DOCINFO);
  di.lpszDocName = szDocName;
  di.lpszOutput = NULL;
  di.lpszDatatype = NULL;
  di.fwType = 0;

  dc.StartDoc(&di); //通知打印机驱动程序执行一新的打印任务
  dc.StartPage();//通知打印机驱动程序打印新页
  dc.SetWindowExt(1440,1440);
  dc.SetViewportExt( dc.GetDeviceCaps(LOGPIXELSX),//返回设备的.以毫米为单位的物理显示宽度
         dc.GetDeviceCaps(LOGPIXELSX));//返回设备的.以毫米为单位的物理显示高度 )
  //X方向向右增加,Y方向向上增加
  CRect rectPrint(0, 0,
   dc.GetDeviceCaps(HORZRES),//返回设备的.以毫米为单位的物理显示宽度
   dc.GetDeviceCaps(VERTRES));//返回设备的.以毫米为单位的物理显示高度  
  dc.DPtoLP(&rectPrint);//设备物理单位转化为逻辑单位
  dc.SetWindowOrg(0, 0);//设置原点

  CFont font;
  VERIFY(font.CreatePointFont(120,
   "宋体",//"Arial",
   &dc));//为DC创建字体
  CFont* def_font = dc.SelectObject(&font);//保存现在的字体
  dc.SetTextAlign(TA_TOP|TA_LEFT);
  
  int index;
  CSize size;
  int x = 1;
  int y = 10;//3800;//注意原点位置和坐标增加的方向
  int y0 = y;
  size = dc.GetTextExtent("00", 2);//计算使用当前字体输出时文本所占大小、宽 度
 
  // #CR##LF#
  #define CRLF "#CR##LF#"
  CString s = "";
  CString szpBuf((char *)pBuf, iLen); //要打印的字符串(注意有长度的限制)

//  TfxWriteToFile("c://prr_log.txt", (LPCSTR)szpBuf);
  
  szpBuf += CRLF;
  szpBuf += "/n";
  
  //0a0d
  char achSep[4] = {0x0a, 0x0d};
  CString strSep = CString(achSep);

  while((index = szpBuf.Find(strSep)) != -1)
  {
   s += szpBuf.Left(index);
   s += CRLF;
   szpBuf = szpBuf.Mid(index+strlen(strSep));
  }
  s +=szpBuf;

  CString ss;

  while((index = s.Find(CRLF)) != -1)
  {
   ss = s.Left(index);
   if(ss.Find("/r") != -1)//输入的字符串有回车符
    ss = s.Left(index-1);
   int t = 0;
   if(((t = ss.Find("#CPI")) != -1)||((t = ss.Find("#cpi")) != -1))//输入的字符串有回车符
   {
    CString s1 = ss.Left(t);
    CString s2 = ss.Mid(t+6);
    ss = s1 + s2;
   }
   s = s.Mid(index+strlen(CRLF));//取剩余的字符串 // AfxMessageBox("A"+ss+"A");
   /*
   if((index = s.Find("#CR##LF##CR##LF##CR##LF##CR##LF##CR##LF#")) != -1)
   {
    //s = s.Mid(index+strlen("#CR##LF##CR##LF##CR##LF##CR##LF#"));//取剩余的字符串
    string szBitmapName = "C://SSPC//receipt.bmp";
    CDC memdc;
    BITMAP bm;
    memdc.CreateCompatibleDC( NULL );
    HBITMAP pbitmap = (HBITMAP)LoadImage(NULL, szBitmapName.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
    memdc.SelectObject(pbitmap); 
    GetObject(pbitmap, sizeof(bm), &bm);
    dc.StretchBlt(0, 0, bm.bmWidth, bm.bmHeight, &memdc, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
    memdc.DeleteDC();
    DeleteObject(pbitmap);

   }
   */
   int offset = 0;
   if(ss.Find("Seq No") != -1)
    ss = "";
   else if((ss.Find("CWD")!=-1)||(ss.Find("PIN")!=-1))
   {
    offset = 5*size.cx;
    ss = ss.Mid(4);
   }
   else if(ss.Find("TFR")!=-1)
   {
//    CString strICBC = "转入帐号";
//    dc.TextOut(300, y0+size.cy*18, strICBC);//打印到缓冲区
    offset = 5*size.cx;
    ss = ss.Mid(4);
   }
    
   dc.TextOut(x+offset, y, ss);//打印到缓冲区

   string ls_text="";
   ls_text = "x:"+ TfxIntToStr(x+offset) + ", y:" + TfxIntToStr(y) + ">>>";
   ls_text += (LPCSTR)ss;

  // TfxWriteToFile("c://prr_prn_log.txt", ls_text);
    
   y += size.cy;
  }

  dc.SelectObject(def_font); //恢复原来的字体
  font.DeleteObject();
  dc.EndPage(); //通知打印机驱动程序页结束
  dc.EndDoc();//通知打印机驱动程序打印完毕
  DeleteDC(dc.Detach());
 }
 

 return 0; 

}

gdb调试 打印输出长变量的值到外部文本里

1. gdb调试 打印输出长变量的值到外部文本里 在gdb调试中调用: dump memory out_alan1    pagebuf         pagebuf+nret   pa...

abap smartforms使用自定义格式打印输出重叠解决方案

通常我们在进行smartforms格式化打印单据的时候,也许系统定义的格式无法满足我们,这个时候我们就需要自定义一个格式来打印,对于自定义的格式我们在预览的时候是正常的,但是打印出来我们发现一些问题,...

java 使用pdf打印输出

  • 2012年10月29日 11:22
  • 10KB
  • 下载

有如图所示的七巧板,试设计算法,使用至多4种不同颜色对七巧板进行涂色(每块七巧板一种颜色),要求相邻区域的颜色互补相同,打印输出所有可能的涂色方案。

C++代码:#include #include using namespace std; //邻接矩阵表 const int data[7][7] = {{0,1,0,0,1,0,1},{1,0,...

使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。

使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello,world”,客户端收到数据后打印输出。 服务器端 import java...

使用log4jdbc,打印输出完整的sql

log4jdbc的简单介绍   使用log4jdbc在不改变原有代码的情况下,就可以收集执行的SQL文和JDBC执行情况。   平时开发使用的ibatis,hibernate,spring jdb...

maven之helloworld——使用log4j在main中打印输出

非常简单的maven入门实例,包学包会。

[iOS]Objective-C中使用for循环打印输出九九乘法表

先来看效果图 这是我在初学iOS时碰到的第一个问题,当时上网查询了也感觉不尽如人意,毕竟网上的答案不一定符合自Objective-C的语法。 其中我在知乎上看到的一个相关回答也是令我这个初学者笑喷...

VC++界面编程之--使用STL auto_ptr管理GDI+对象

界面编程中,我比较关心GDI或GDI+对象的创建与销毁。生怕一个逻辑处理不好,就造成了内存泄漏。以前我用传统的delete操作来销毁GDI+对象,但发现编程实现效果不太好,总让人战战兢兢,而且逻辑比较...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PTR_PrintText,使用GDI打印输出文本
举报原因:
原因补充:

(最多只允许输入30个字)