Calling PrintDialog Wndows API from Progress

Chris Kelleher

Administrator
Staff member
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>/*------------------------------------------------------------------------

File: PrintDlg.p

Description: Provides and interface to the common Print Dialog box.

Input Parameters:


Output Parameters:


Author: Todd G. Nist

------------------------------------------------------------------------*/


&GLOB PD_ALLPAGES 0
&GLOB PD_SELECTION 1
&GLOB PD_PAGENUMS 2
&GLOB PD_NOSELECTION 4
&GLOB PD_NOPAGENUMS 8
&GLOB PD_COLLATE 16
&GLOB PD_PRINTTOFILE 32 /* should the PrintToFile
toggle box show */
&GLOB PD_PRINTSETUP 64 /* display PrintSetup dialog
vs Printer Dialog */
&GLOB PD_NOWARNING 128
&GLOB PD_RETURNDC 256 /* return the Device Context
for the selected printer */
&GLOB PD_RETURNIC 512
&GLOB PD_RETURNDEFAULT 1024 /* returns hDevMod and
hDevName without displaying dialog */
&GLOB PD_SHOWHELP 2048 /* should help button show
up */
&GLOB PD_ENABLEPRINTHOOK 4096
&GLOB PD_ENABLESETUPHOOK 8192
&GLOB PD_ENABLEPRINTTEMPLATE 16384
&GLOB PD_ENABLESETUPTEMPLATE 32768
&GLOB PD_ENABLEPRINTTEMPLATEHANDLE 65536
&GLOB PD_ENABLESETUPTEMPLATEHANDLE 131072
&GLOB PD_USEDEVMODECOPIES 262144
&GLOB PD_USEDEVMODECOPIESANDCOLLATE 524288
&GLOB PD_DISABLEPRINTTOFILE 524288
&GLOB PD_HIDEPRINTTOFILE 1048576
&GLOB PD_NONETWORKBUTTON 2097152


define var lpPrintDlg as memptr no-undo.
define var lpDevName as memptr no-undo.
define var iRetCode as int no-undo.


/* set up PRINTDLG Structure */
assign
/* allocate memory */
set-size(lpPrintDlg) = 66
put-long(lpPrintDlg,1) = get-size(lpPrintDlg) /* structure
size */
put-long(lpPrintDlg,5) = current-window:hwnd /* hwndOwner
*/
put-long(lpPrintDlg,9) = 0 /* hDevMod
*/
put-long(lpPrintDlg,13) = 0 /* hDevNames
*/
put-long(lpPrintDlg,17) = 0 /* hDC
*/
put-long(lpPrintDlg,21) = {&PD_RETURNDC} /* flags
*/
put-short(lpPrintDlg,25) = 1 /* nFromPage
*/
put-short(lpPrintDlg,27) = 1 /* nToPage
*/
put-short(lpPrintDlg,29) = 0 /* nMinPage
*/
put-short(lpPrintDlg,31) = 0 /* nMaxPage
*/
put-short(lpPrintDlg,33) = 1 /* nCopies
*/
put-long(lpPrintDlg,35) = 0
put-long(lpPrintDlg,39) = 0
put-long(lpPrintDlg,43) = 0
put-long(lpPrintDlg,47) = 0
put-long(lpPrintDlg,51) = 0
put-long(lpPrintDlg,55) = 0
put-long(lpPrintDlg,59) = 0
put-long(lpPrintDlg,63) = 0
.

RUN PrintDlgA (input get-pointer-value(lpPrintDlg),
output iRetCode).

/* ok pressed */
if iRetCode > 0 then
do:
RUN GlobalLock(INPUT get-long(lpPrintDlg,9),
OUTPUT iRetCode).
set-pointer-value(lpDevName) = iRetCode.

message 'Printer:' get-string(lpDevName,1) view-as alert-box.
message 'HDC is:' get-long(lpPrintDlg,17) view-as alert-box.

RUN GlobalUnlock(INPUT get-long(lpPrintDlg,9)).
end.
else
message 'Error or cancel pressed in dialog.' skip
'Use CommDlgExtendedError to view the actual error.'
view-as alert-box error.

/* deallocate memory */
set-size(lpPrintDlg) = 0.

PROCEDURE PrintDlgA EXTERNAL "comdlg32.dll":U:
DEFINE INPUT PARAMETER lpStructure AS LONG.
DEFINE RETURN PARAMETER iRetCode AS LONG.
END.

PROCEDURE GlobalLock EXTERNAL "Kernel32":U:
DEFINE INPUT PARAMETER hDevMod AS LONG.
DEFINE RETURN PARAMETER lpDevMod AS LONG.
END.

PROCEDURE GlobalUnlock EXTERNAL "Kernel32":U:
DEFINE INPUT PARAMETER hDevMod AS LONG.
END.
[/code]
 
Top