home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / progwin / chap15 / print3.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-12  |  2.9 KB  |  101 lines

  1. /*---------------------------------------
  2.    PRINT3.C -- Printing with Dialog Box
  3.                (c) Charles Petzold, 1990
  4.   ---------------------------------------*/
  5.  
  6. #include <windows.h>
  7.  
  8. HDC  GetPrinterDC (void) ;              // in PRINT.C
  9. void PageGDICalls (HDC, short, short) ;
  10.  
  11. HANDLE hInst ;
  12. char   szAppName [] = "Print3" ;
  13. char   szCaption [] = "Print Program 3 (Dialog Box)" ;
  14.  
  15. BOOL   bUserAbort ;
  16. HWND   hDlgPrint ;
  17.  
  18. BOOL FAR PASCAL PrintDlgProc (HWND hDlg, WORD message, WORD wParam, LONG lParam)
  19.      {
  20.      switch (message)
  21.           {
  22.           case WM_INITDIALOG:
  23.                SetWindowText (hDlg, szAppName) ;
  24.                EnableMenuItem (GetSystemMenu (hDlg, FALSE), SC_CLOSE,
  25.                                                             MF_GRAYED) ;
  26.                return TRUE ;
  27.  
  28.           case WM_COMMAND:
  29.                bUserAbort = TRUE ;
  30.                EnableWindow (GetParent (hDlg), TRUE) ;
  31.                DestroyWindow (hDlg) ;
  32.                hDlgPrint = 0 ;
  33.                return TRUE ;
  34.           }
  35.      return FALSE ;
  36.      }          
  37.  
  38. BOOL FAR PASCAL AbortProc (HDC hdcPrn, short nCode)
  39.      {
  40.      MSG   msg ;
  41.  
  42.      while (!bUserAbort && PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
  43.           {
  44.           if (!hDlgPrint || !IsDialogMessage (hDlgPrint, &msg))
  45.                {
  46.                TranslateMessage (&msg) ;
  47.                DispatchMessage (&msg) ;
  48.                }
  49.           }
  50.      return !bUserAbort ;
  51.      }
  52.  
  53. BOOL PrintMyPage (HWND hwnd)
  54.      {
  55.      static char szMessage [] = "Print3: Printing" ; 
  56.      BOOL        bError = FALSE ;
  57.      FARPROC     lpfnAbortProc, lpfnPrintDlgProc ;
  58.      HDC         hdcPrn ;
  59.      RECT        rect ;
  60.      short       xPage, yPage ;
  61.  
  62.      if (NULL == (hdcPrn = GetPrinterDC ()))
  63.           return TRUE ;
  64.  
  65.      xPage = GetDeviceCaps (hdcPrn, HORZRES) ;
  66.      yPage = GetDeviceCaps (hdcPrn, VERTRES) ;
  67.  
  68.      EnableWindow (hwnd, FALSE) ;
  69.  
  70.      bUserAbort = FALSE ;
  71.      lpfnPrintDlgProc = MakeProcInstance (PrintDlgProc, hInst) ;
  72.      hDlgPrint = CreateDialog (hInst, "PrintDlgBox", hwnd, lpfnPrintDlgProc) ;
  73.  
  74.      lpfnAbortProc = MakeProcInstance (AbortProc, hInst) ;
  75.      Escape (hdcPrn, SETABORTPROC, 0, (LPSTR) lpfnAbortProc, NULL) ;
  76.  
  77.      if (Escape (hdcPrn, STARTDOC, sizeof szMessage - 1, szMessage, NULL) > 0)
  78.           {
  79.           PageGDICalls (hdcPrn, xPage, yPage) ;
  80.  
  81.           if (Escape (hdcPrn, NEWFRAME, 0, NULL, NULL) > 0)
  82.                Escape (hdcPrn, ENDDOC, 0, NULL, NULL) ;
  83.           else
  84.                bError = TRUE ;
  85.           }
  86.      else
  87.           bError = TRUE ;
  88.                                         
  89.      if (!bUserAbort)
  90.           {
  91.           EnableWindow (hwnd, TRUE) ;     
  92.           DestroyWindow (hDlgPrint) ;
  93.           }
  94.  
  95.      FreeProcInstance (lpfnPrintDlgProc) ;
  96.      FreeProcInstance (lpfnAbortProc) ;
  97.      DeleteDC (hdcPrn) ;
  98.  
  99.      return bError || bUserAbort ;
  100.      }
  101.