这段程序编译通过, WritePrinter语句已执行,打印出字符,但linto,textout并未打印出内容,为何? Public Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
 Public Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
 Public Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
 Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, ByVal pDefault As Long) As Long
 Public Declare Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pDocInfo As DOCINFO) As Long
 Public Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
 Public Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long
 Public Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
 Public Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Long) As Long
 Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
  
 
  
 Public Type POINTAPI
  x As Long
  y As Long
 End Type
 Private Sub Command1_Click()  Dim lhPrinter As Long
  Dim lReturn As Long
  Dim i, j As Long
  Dim lpcWritten As Long
  Dim lDoc As Long
  Dim sWrittenData As String
  Dim MyDocInfo As DOCINFO
  Dim pt As POINTAPI
  Dim OutString As String
      lReturn = OpenPrinter(Printer.DeviceName, lhPrinter, 0)
  If lReturn = 0 Then
  MsgBox "The Printer Name you typed wasn't recognized."
  Exit Sub
  End If
  MyDocInfo.pDocName = "AAAAAA"
  MyDocInfo.pOutputFile = vbNullString
  MyDocInfo.pDatatype = vbNullString
  lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
  Call StartPagePrinter(lhPrinter)
    
  Printer.ScaleMode = 3
    
  sWrittenData = "How's that for Magic !!!!"
  lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, Len(sWrittenData), lpcWritten)
    
   
  OutString = "TEST LINE !!!!!!"
  i = LenB(StrConv(OutString, 1))
  TextOut lhPrinter, 10, 10, OutString, i
    
  MoveToEx lhPrinter, 10 / Printer.TwipsPerPixelX, 1 / Printer.TwipsPerPixelY, 0&
  LineTo lhPrinter, 120 / Printer.TwipsPerPixelX, 4 / Printer.TwipsPerPixelY
  lReturn = EndPagePrinter(lhPrinter)
  lReturn = EndDocPrinter(lhPrinter)
  lReturn = ClosePrinter(lhPrinter)End Sub

解决方案 »

  1.   

      TextOut lhPrinter, 10, 10, OutString, i
        
      MoveToEx lhPrinter, 10 / Printer.TwipsPerPixelX, 1 / Printer.TwipsPerPixelY, 0&
      LineTo lhPrinter, 120 / Printer.TwipsPerPixelX, 4 / Printer.TwipsPerPixelY  TextOut Printer.hdc, 10, 10, OutString, i
        
      MoveToEx Printer.hdc, 10 / Printer.TwipsPerPixelX, 1 / Printer.TwipsPerPixelY, 0&
      LineTo Printer.hdc, 120 / Printer.TwipsPerPixelX, 4 / Printer.TwipsPerPixelY
      

  2.   

      TextOut lhPrinter, 10, 10, OutString, i
        
      MoveToEx lhPrinter, 10 / Printer.TwipsPerPixelX, 1 / Printer.TwipsPerPixelY, 0&
      LineTo lhPrinter, 120 / Printer.TwipsPerPixelX, 4 / Printer.TwipsPerPixelY  TextOut Printer.hdc, 10, 10, OutString, i
        
      MoveToEx Printer.hdc, 10 / Printer.TwipsPerPixelX, 1 / Printer.TwipsPerPixelY, 0&
      LineTo Printer.hdc, 120 / Printer.TwipsPerPixelX, 4 / Printer.TwipsPerPixelY
      

  3.   

    lhPrinter  改成 Printer.hdc仍不行
      

  4.   

    但是 WritePrinter(lhPrinter, ByVal sWrittenData, Len(sWrittenData), lpcWritten)
    可执行
      

  5.   

      MoveToEx Printer.hdc, 10 / Printer.TwipsPerPixelX, 1 / Printer.TwipsPerPixelY, 0&
      LineTo Printer.hdc, 120 / Printer.TwipsPerPixelX, 4 / Printer.TwipsPerPixelY改为
    MoveToEx Printer.hdc, 0, 0, 0&
    LineTo Printer.hdc, 120 , 100
    试试
      

  6.   

    MoveToEx Printer.hdc, 10 / Printer.TwipsPerPixelX, 1 / Printer.TwipsPerPixelY, 0&
      LineTo Printer.hdc, 120 / Printer.TwipsPerPixelX, 4 / Printer.TwipsPerPixelY改为
    MoveToEx Printer.hdc, 0, 0, 0&
    LineTo Printer.hdc, 120 , 100
    仍然不打印!!!但是 WritePrinter(lhPrinter, ByVal sWrittenData, Len(sWrittenData), lpcWritten)
    可以打印出字符
      

  7.   


    改为
    pt.x=0
    pt.y=0
     
    MoveToEx Printer.hdc, 0, 0, pt
    LineTo Printer.hdc, 120 , 100
      

  8.   

    MoveToEx Printer.hdc, 0, 0, pt
    这句时提示ByRef参数类型不符
      

  9.   

    Public Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Long) As Long
    改为
    Public Declare Function MoveToEx Lib "gdi32" Alias "MoveToEx" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
      

  10.   

    改后可以运行,但仍不打印,我在微软论坛上看到一个帖子,讲调用lineto函数将图形画在内存中。然后将内存中的数据发送到打印机打印。如何编呢?
      

  11.   

    .EndDoc'之后才实际打印的说。
      

  12.   

    EndDoc是分页打印,我编的是地震仪绘图程序,收到一个点,打印机就立即打出这点到前一点的曲线