News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

Copy to the printer

Started by RuiLoureiro, January 27, 2009, 05:17:38 PM

Previous topic - Next topic

RuiLoureiro

Hi,
     i want to copy the client rect to the printer. I have the printer handle.
     anyone can help me ? Thanks
Rui

Tedd

http://msdn.microsoft.com/en-us/library/ms535517(VS.85).aspx

Follow the example...
Once you've set it up, treat the printer DC just like any other screen/memory DC, draw what you want on it, and that's what should be printed. (Roughly: StartDoc, StartPage, do your drawing, EndPage, EndDoc.)
No snowflake in an avalanche feels responsible.

RuiLoureiro

Thank you Tedd
                        i know what you said. My problem is the screen.
                        See this proc. How to get  lpBits to use StretchDIBits ?
                        How do i get BITMAPINFO ?
Quote
;       _hdc    - screen DC
;       _hpdc   - printer DC
;
align 16
CpyDCToPDC          proc
                    ;
                    ; printer
                    ; »»»»»»»
                    invoke  GetDeviceCaps, _hpdc, LOGPIXELSX
                    mov     _LarPrnLogic, eax
                    invoke  GetDeviceCaps, _hpdc, LOGPIXELSY
                    mov     _AltPrnLogic, eax
                    ;
                    ; screen
                    ; »»»»»»
                    invoke  GetDeviceCaps, _hdc, LOGPIXELSX
                    mov     _LarEcrLogic, eax
                    invoke  GetDeviceCaps, _hdc, LOGPIXELSY
                    mov     _AltEcrLogic, eax

                    ; »»»»»»»»»»»»»»»»»»
                    ; Factor de escala X
                    ; »»»»»»»»»»»»»»»»»»
                    xor     edx, edx
                    mov     eax, _LarPrnLogic
                    mov     ebx, _LarEcrLogic
                    cmp     eax, ebx
                    jae     short @F
                    ;
                    xchg    eax, ebx
                    ;
@@:             div      ebx
                    mov     _fScaleX, eax

                    ; »»»»»»»»»»»»»»»»»»
                    ; Factor de escala Y
                    ; »»»»»»»»»»»»»»»»»»
                    xor     edx, edx
                    mov     eax, _AltPrnLogic
                    mov     ebx, _AltEcrLogic
                    cmp     eax, ebx
                    jae     short @F
                    ;
                    xchg    eax, ebx
                    ;
@@:             div      ebx
                    mov     _fScaleY, eax
                    ;
                    ; Largura X Prn
                    ; »»»»»»»»»»»»»
                    mov     eax, _ClientDimX
                    mul     _fScaleX
                    mov     _PrnDimX, eax
                    ;
                    ; Altura Y Prn
                    ; »»»»»»»»»»»»
                    mov     eax, _ClientDimY
                    mul     _fScaleY
                    mov     _PrnDimY, eax
                    ;
                    ;
                    ;
                    call    IniDrawPrn      ; Start Doc     
                    call    StartPagePrn    ; Start Page
                    ;
                    ; Copia DC para pdc
                    ; ------------------                   
;  HDC hdc,                      // handle to DC
;  int XDest,                    // x-coord of destination upper-left corner
;  int YDest,                    // y-coord of destination upper-left corner
;  int nDestWidth,               // width of destination rectangle
;  int nDestHeight,              // height of destination rectangle

;  int XSrc,                     // x-coord of source upper-left corner
;  int YSrc,                     // y-coord of source upper-left corner
;  int nSrcWidth,                // width of source rectangle
;  int nSrcHeight,               // height of source rectangle

;  CONST VOID *lpBits,           // bitmap bits
;  CONST BITMAPINFO *lpBitsInfo, // bitmap data
;  UINT iUsage,                  // usage options
;  DWORD dwRop                   // raster operation code
                   
                    invoke  StretchDIBits, _xLeft, _yTop, _PrnDimX, _PrnDimY,
                                           0, 0, _ClientDimX, _ClientDimY,
                                           _lpBits, offset _bmi
                                           DIB_RGB_COLORS, SRCCOPY
                     
                    cmp     eax, GDI_ERROR
                    je      @F
                    ;

                    call    EndPagePrn
                    call    EndDocPrn
                    clc
                    ret
                    ;
                    ; Erro
                    ; ****
@@:             call    EndPagePrn      ; End Page
                    call    EndDocPrn       ; End Doc

                    invoke SendMsgErro, 190
                    ret
CpyDCToPDC          endp
Thanks
Rui

Tedd

Don't worry about the bitmap, just do it directly -- StretchBlt :wink
No snowflake in an avalanche feels responsible.

RuiLoureiro

Hi, Tedd,
               Thank you, it works   :wink