Annotation of mstools/samples/sdktools/porttool/ptprint.c, revision 1.1

1.1     ! root        1: 
        !             2: /******************************************************************************\
        !             3: *       This is a part of the Microsoft Source Code Samples. 
        !             4: *       Copyright (C) 1993 Microsoft Corporation.
        !             5: *       All rights reserved. 
        !             6: *       This source code is only intended as a supplement to 
        !             7: *       Microsoft Development Tools and/or WinHelp documentation.
        !             8: *       See these sources for detailed information regarding the 
        !             9: *       Microsoft samples programs.
        !            10: \******************************************************************************/
        !            11: 
        !            12: #include "PortTool.h"
        !            13: 
        !            14: HWND   hCancelDlg = 0;
        !            15: PRINTDLG       pdPrint;
        !            16: 
        !            17: /* get default printer configuration and save in hWnd extra bytes for use later */
        !            18: BOOL WINAPI GetPrinterConfig (
        !            19:     HWND    hWnd)
        !            20: {
        !            21:        // PRINTDLG     pdPrint;
        !            22: 
        !            23:     pdPrint.lStructSize = sizeof (PRINTDLG);
        !            24:        pdPrint.Flags           = PD_RETURNDEFAULT;
        !            25:        pdPrint.hwndOwner       = hWnd;
        !            26:        pdPrint.hDevMode        = NULL;
        !            27:        pdPrint.hDevNames       = NULL;
        !            28:        pdPrint.hDC             = NULL;
        !            29: 
        !            30:        PrintDlg (&pdPrint);
        !            31: 
        !            32:        SetWindowLong (hWnd, WL_HPTRDEVNAMES, (LONG) pdPrint.hDevNames);
        !            33: 
        !            34:        return TRUE;
        !            35: }
        !            36: 
        !            37: 
        !            38: 
        !            39: /* abort proc called by gdi during print download process */
        !            40: int WINAPI AbortProc (
        !            41:     HDC     hdc,
        !            42:     int     nErr)
        !            43: {
        !            44:     BOOL    fContinue = TRUE;
        !            45:     MSG     msg;
        !            46: 
        !            47:     /* process messages for cancel dialog and other apps */
        !            48:     while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
        !            49:        {
        !            50:        if (msg.message == UM_CANCELPRINT)
        !            51:            {
        !            52:            fContinue = FALSE;
        !            53:            break;
        !            54:            }
        !            55: 
        !            56:        else if (!hCancelDlg || !IsDialogMessage (hCancelDlg, &msg))
        !            57:            {
        !            58:            TranslateMessage (&msg);
        !            59:            DispatchMessage  (&msg);
        !            60:            }
        !            61:        }
        !            62: 
        !            63:     return fContinue;
        !            64: }
        !            65: 
        !            66: 
        !            67: 
        !            68: 
        !            69: BOOL WINAPI CancelDlgProc (
        !            70:     HWND    hWnd,
        !            71:     UINT    uMsg,
        !            72:     UINT    uParam,
        !            73:     LONG    lParam)
        !            74: {
        !            75: 
        !            76:     switch (uMsg)
        !            77:        {
        !            78:        case WM_INITDIALOG:
        !            79:            {
        !            80:            char    *lpdn;
        !            81:            char    lpszTitle[MAX_PATH];
        !            82: 
        !            83:            /* initialize dialog control information */
        !            84:            lpdn = LocalLock ((HANDLE)GetWindowLong (hWnd, WL_HPTRDEVNAMES));
        !            85:            SetDlgItemText (hWnd,
        !            86:                            IDC_PRINTDEVICE,
        !            87:                            lpdn + sizeof (DEVNAMES) +
        !            88:                                ((DEVNAMES *)lpdn)->wDeviceOffset);
        !            89:            SetDlgItemText (hWnd,
        !            90:                            IDC_PRINTPORT,
        !            91:                            lpdn + sizeof (DEVNAMES) +
        !            92:                                ((DEVNAMES *)lpdn)->wOutputOffset);
        !            93:            LocalUnlock ((HANDLE)GetWindowLong (hWnd, WL_HPTRDEVNAMES));
        !            94:            GetWindowText (hWnd, lpszTitle, sizeof (lpszTitle));
        !            95:            SetDlgItemText (hWnd, IDC_PRINTTITLE, lpszTitle);
        !            96:            }
        !            97:            break;
        !            98: 
        !            99:        case WM_COMMAND:
        !           100:            /* if cancel button selected, post message to cancel print job */
        !           101:            if (LOWORD (uParam) == IDCANCEL)
        !           102:                {
        !           103:                PostMessage (GetParent (hWnd), UM_CANCELPRINT, 0, 0);
        !           104:                DestroyWindow (hWnd);
        !           105:                }
        !           106:            break;
        !           107: 
        !           108:        default:
        !           109:            return FALSE;
        !           110:     }
        !           111:     return TRUE;
        !           112: }
        !           113: 
        !           114: 
        !           115: 
        !           116: /* put up the print common dialog, and print */
        !           117: int WINAPI PrintFile (
        !           118:     HWND    hWnd)
        !           119: {
        !           120:     char       *lpEditData;
        !           121:     HANDLE     hEditData;
        !           122:     SIZE       sLine;
        !           123:     int        yLineExt;
        !           124:     int        yExt;
        !           125:     int        yPageExt;
        !           126:     UINT       uLine;
        !           127:     UINT       uNumLines;
        !           128:     UINT       uOffset;
        !           129:     UINT       uLineLen;
        !           130:     HWND       hWndEdit;
        !           131:        // PRINTDLG     pdPrint;
        !           132:     DOCINFO    diPrint;
        !           133:     char       lpszJobName[MAX_PATH];
        !           134: 
        !           135: 
        !           136:     /* call common print dialog to get initialized printer DC */
        !           137:     pdPrint.hwndOwner = hWnd;
        !           138:     pdPrint.hDC = NULL;
        !           139:     pdPrint.Flags = PD_RETURNDC;
        !           140: 
        !           141:     /* call common print dialog */
        !           142:     if (!PrintDlg (&pdPrint))
        !           143:        return IDS_PTRCOMMDLGFAILED;
        !           144: 
        !           145:     /* start cancel dialog box */
        !           146:     hCancelDlg = CreateDialog ((HANDLE)GetModuleHandle (NULL),
        !           147:                               IDD_CANCELDLG,
        !           148:                               hWnd,
        !           149:                               CancelDlgProc);
        !           150: 
        !           151: 
        !           152:     if (!hCancelDlg)
        !           153:        return IDS_CANCELDLGFAILED;
        !           154: 
        !           155:     ShowWindow (hCancelDlg, SW_SHOW);
        !           156:     UpdateWindow (hCancelDlg);
        !           157: 
        !           158:     /* set AbortProc callback */
        !           159:     if (SetAbortProc (pdPrint.hDC, (PROC)AbortProc) < 0)
        !           160:        {
        !           161:        /* on error, clean up and go away */
        !           162:        DestroyWindow (hCancelDlg);
        !           163:        DeleteDC (pdPrint.hDC);
        !           164:        return IDS_SETABORTPROCFAILED;
        !           165:        }
        !           166: 
        !           167:     /* initialize printer for job */
        !           168:     GetWindowText (hWnd, lpszJobName, sizeof (lpszJobName));
        !           169:     diPrint.cbSize = sizeof (DOCINFO);
        !           170:     diPrint.lpszDocName = lpszJobName;
        !           171:     diPrint.lpszOutput = NULL;
        !           172:     if (StartDoc (pdPrint.hDC, &diPrint) == SP_ERROR)
        !           173:        {
        !           174:        /* on error, clean up and go away */
        !           175:        DestroyWindow (hCancelDlg);
        !           176:        DeleteDC (pdPrint.hDC);
        !           177:        return IDS_STARTDOCFAILED;
        !           178:        }
        !           179: 
        !           180:     /* job started, so display cancel dialog */
        !           181:     ShowWindow (hCancelDlg, SW_SHOW);
        !           182:     UpdateWindow (hCancelDlg);
        !           183: 
        !           184:     /* retrieve dimensions for printing and init loop variables */
        !           185:     hWndEdit = (HWND)GetWindowLong(hWnd, WL_HWNDEDIT);
        !           186:     hEditData = (HANDLE)SendMessage (hWndEdit, EM_GETHANDLE, 0, 0L);
        !           187:     uNumLines = (WORD)SendMessage (hWndEdit, EM_GETLINECOUNT, 0, 0L);
        !           188:     GetTextExtentPoint (pdPrint.hDC, "CC", 2, &sLine);
        !           189:     yLineExt = sLine.cy;
        !           190:     yPageExt = GetDeviceCaps (pdPrint.hDC, VERTRES);
        !           191:     yExt = 0;
        !           192:     uLine = 0;
        !           193: 
        !           194:     /* print text line by line from top to bottom */
        !           195:     while (uLine < uNumLines)
        !           196:        {
        !           197:        /* if at end of page, start a new page */
        !           198:        if ((yExt + yLineExt) > yPageExt)
        !           199:            {
        !           200:            if (!EndPage (pdPrint.hDC))
        !           201:                {
        !           202:                DestroyWindow (hCancelDlg);
        !           203:                DeleteDC (pdPrint.hDC);
        !           204:                return IDS_PRINTABORTED;
        !           205:                }
        !           206:            yExt = 0;
        !           207:            }
        !           208: 
        !           209:        /* determine buffer offset for current line and line length */
        !           210:        uOffset = SendMessage (hWndEdit, EM_LINEINDEX, uLine, 0);
        !           211:        uLineLen = SendMessage (hWndEdit, EM_LINELENGTH, uOffset, 0);
        !           212:        lpEditData = (char *)LocalLock (hEditData) + uOffset;
        !           213: 
        !           214:        /* print current the line and unlock the text handle */
        !           215:        TextOut (pdPrint.hDC, 0, yExt, lpEditData, uLineLen);
        !           216:        LocalUnlock (hEditData);
        !           217: 
        !           218:        /* increment page position */
        !           219:        yExt += yLineExt;
        !           220:        uLine++;
        !           221:        }
        !           222: 
        !           223:     /* end the last page and document */
        !           224:     EndPage (pdPrint.hDC);
        !           225:     EndDoc (pdPrint.hDC);
        !           226: 
        !           227:     /* end cancel dialog box, clean up and exit */
        !           228:     DestroyWindow (hCancelDlg);
        !           229:     DeleteDC(pdPrint.hDC);
        !           230:     return TRUE;
        !           231: }
        !           232: 
        !           233: 
        !           234: 
        !           235: /* printer setup common dialog */
        !           236: int WINAPI PrinterSetup (
        !           237:     HWND    hWnd)
        !           238: {
        !           239:        // PRINTDLG     pdPrint;
        !           240: 
        !           241:        pdPrint.Flags           = PD_PRINTSETUP;
        !           242:        pdPrint.hwndOwner       = hWnd;
        !           243: 
        !           244:     /* call common print dialog */
        !           245:        if (!PrintDlg (&pdPrint) && CommDlgExtendedError ())
        !           246:                return IDS_PTRCOMMDLGFAILED;
        !           247:        else
        !           248:                return 0;
        !           249: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.