home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / fsrc1241.zip / printsetup.c < prev    next >
C/C++ Source or Header  |  1999-02-14  |  22KB  |  590 lines

  1. /*---------------------------------------------------------------------------+
  2.  | Titel: PRINTSETUP.C                                                       |
  3.  +-----------------------------------------+---------------------------------+
  4.  | Erstellt von: Michael Hohner            | Am: 23.09.1995                  |
  5.  +-----------------------------------------+---------------------------------+
  6.  | System: OS/2 2.x, 3.x PM                                                  |
  7.  +---------------------------------------------------------------------------+
  8.  | Beschreibung:                                                             |
  9.  |                                                                           |
  10.  |   Printer-Setup von FleetStreet                                           |
  11.  |                                                                           |
  12.  |                                                                           |
  13.  +---------------------------------------------------------------------------+
  14.  | Bemerkungen:                                                              |
  15.  +---------------------------------------------------------------------------*/
  16.  
  17. /*----------------------------- Header-Dateien ------------------------------*/
  18. #pragma strings(readonly)
  19.  
  20. #define INCL_PM
  21. #define INCL_SPLDOSPRINT
  22. #include <os2.h>
  23. #include <string.h>
  24. #include <stdlib.h>
  25. #include <stdio.h>
  26. #include "main.h"
  27. #include "structs.h"
  28. #include "msgheader.h"
  29. #include "areaman\areaman.h"
  30. #include "dialogids.h"
  31. #include "resids.h"
  32. #include "utility.h"
  33. #include "controls\fontdisp.h"
  34. #include "printsetup.h"
  35. #include "printmsg\setup.h"
  36.  
  37. /*--------------------------------- Defines ---------------------------------*/
  38.  
  39. /*---------------------------------- Typen ----------------------------------*/
  40.  
  41. /*---------------------------- Globale Variablen ----------------------------*/
  42.  
  43. extern HAB anchor;
  44. extern HWND hwndhelp;
  45.  
  46. static PCHAR BorderValues[]=
  47. {
  48.    "0,0", "0,1", "0,2", "0,3", "0,4", "0,5", "0,6", "0,7", "0,8", "0,9",
  49.    "1,0", "1,1", "1,2", "1,3", "1,4", "1,5", "1,6", "1,7", "1,8", "1,9",
  50.    "2,0", "2,1", "2,2", "2,3", "2,4", "2,5", "2,6", "2,7", "2,8", "2,9",
  51.    "3,0", "3,1", "3,2", "3,3", "3,4", "3,5", "3,6", "3,7", "3,8", "3,9",
  52.    "4,0", "4,1", "4,2", "4,3", "4,4", "4,5", "4,6", "4,7", "4,8", "4,9",
  53.    "5,0", "5,1", "5,2", "5,3", "5,4", "5,5", "5,6", "5,7", "5,8", "5,9",
  54.    "6,0", "6,1", "6,2", "6,3", "6,4", "6,5", "6,6", "6,7", "6,8", "6,9",
  55.    "7,0", "7,1", "7,2", "7,3", "7,4", "7,5", "7,6", "7,7", "7,8", "7,9",
  56.    "8,0", "8,1", "8,2", "8,3", "8,4", "8,5", "8,6", "8,7", "8,8", "8,9",
  57.    "9,0", "9,1", "9,2", "9,3", "9,4", "9,5", "9,6", "9,7", "9,8", "9,9", "10,0"
  58. };
  59.  
  60. #define NumBorderValues (sizeof(BorderValues)/sizeof(BorderValues[0]))
  61.  
  62. /*--------------------------- Funktionsprototypen ---------------------------*/
  63.  
  64. /*----------------------- interne Funktionsprototypen -----------------------*/
  65.  
  66. static void InsertPrintSetupPages(HWND notebook, PPRINTSETUP pData);
  67. static MRESULT EXPENTRY PSListProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  68. static MRESULT EXPENTRY PSBordersProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  69. static MRESULT EXPENTRY PSFontsProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  70. static MRESULT EXPENTRY PSOutputProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  71. static void ConfigurePrinter(HWND hwndListbox, PPRINTSETUP pPrintSetup);
  72. static LONG QuerySpinValue(HWND hwnd);
  73. static LONG GetFontByDlg(HWND hwndOwner, PPRINTSETUP pPrintSetup, char *pchFont, ULONG idFontDisp);
  74.  
  75.  
  76. /*-----------------------------------------------------------------------------
  77.  | Funktionsname:
  78.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  79.  | Beschreibung:
  80.  |
  81.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  82.  | Parameter:
  83.  |
  84.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  85.  | Rückgabewerte:
  86.  |
  87.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  88.  | Sonstiges:
  89.  |
  90.  +---------------------------------------------------------------------------*/
  91.  
  92. MRESULT EXPENTRY PrintSetupProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  93. {
  94.    PPRINTSETUP pPrintSetup = WinQueryWindowPtr(hwnd, QWL_USER);
  95.  
  96.    switch(msg)
  97.    {
  98.       case WM_INITDLG:
  99.          pPrintSetup = (PPRINTSETUP) mp2;
  100.          InitPrintSetup(pPrintSetup, anchor);
  101.          InsertPrintSetupPages(WinWindowFromID(hwnd, IDD_PRINTSETUP+1), pPrintSetup);
  102.  
  103.          RestoreWinPos(hwnd, &pPrintSetup->DlgPos, TRUE, TRUE);
  104.          WinSetWindowPtr(hwnd, QWL_USER, pPrintSetup);
  105.          break;
  106.  
  107.       case WM_ADJUSTFRAMEPOS:
  108.          SizeToClient(anchor, (PSWP) mp1, hwnd, IDD_PRINTSETUP+1);
  109.          break;
  110.  
  111.       case WM_WINDOWPOSCHANGED:
  112.          if (WinQueryWindowPtr(hwnd, QWL_USER))
  113.             SaveWinPos(hwnd, (PSWP) mp1, &pPrintSetup->DlgPos, &pPrintSetup->bDirty);
  114.          break;
  115.  
  116.       case WM_ACTIVATE:
  117.          if (mp1)
  118.             WinAssociateHelpInstance(hwndhelp, hwnd);
  119.          else
  120.             WinAssociateHelpInstance(hwndhelp, NULLHANDLE);
  121.          break;
  122.  
  123.       default:
  124.          break;
  125.    }
  126.    return WinDefDlgProc(hwnd, msg, mp1, mp2);
  127. }
  128.  
  129. /*---------------------------------------------------------------------------*/
  130. /* Funktionsname: InsertPrintSetupPages                                      */
  131. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  132. /* Beschreibung: Fuegt die Settings-Pages in das Notebook fuer den           */
  133. /*               Printer-Setup ein.                                          */
  134. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  135. /* Parameter: notebook: Window-handle des Notebooks                          */
  136. /*                                                                           */
  137. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  138. /* Rückgabewerte: -                                                          */
  139. /*                                                                           */
  140. /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  141. /* Sonstiges:                                                                */
  142. /*                                                                           */
  143. /*---------------------------------------------------------------------------*/
  144.  
  145. static void InsertPrintSetupPages(HWND notebook, PPRINTSETUP pData)
  146. {
  147.    SetNotebookParams(notebook, 80);
  148.  
  149.    InsertOnePage(notebook, IDD_PS_LIST,    IDST_TAB_PS_LIST,    PSListProc,    pData);
  150.    InsertOnePage(notebook, IDD_PS_BORDERS, IDST_TAB_PS_BORDERS, PSBordersProc, pData);
  151.    InsertOnePage(notebook, IDD_PS_FONTS,   IDST_TAB_PS_FONTS,   PSFontsProc,   pData);
  152.    InsertOnePage(notebook, IDD_PS_OUTPUT,  IDST_TAB_PS_OUTPUT,  PSOutputProc,  pData);
  153.  
  154.    return;
  155. }
  156.  
  157. /*-----------------------------------------------------------------------------
  158.  | Funktionsname:
  159.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  160.  | Beschreibung:
  161.  |
  162.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  163.  | Parameter:
  164.  |
  165.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  166.  | Rückgabewerte:
  167.  |
  168.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  169.  | Sonstiges:
  170.  |
  171.  +---------------------------------------------------------------------------*/
  172.  
  173. static MRESULT EXPENTRY PSListProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  174. {
  175.    PPRINTSETUP pPrintSetup = WinQueryWindowPtr(hwnd, QWL_USER);
  176.    HWND hwndListbox;
  177.    int i, index;
  178.    char *psz;
  179.    PPRQINFO3 pqi;
  180.  
  181.    switch(msg)
  182.    {
  183.       case WM_INITDLG:
  184.          pPrintSetup = (PPRINTSETUP) mp2;
  185.          WinSetWindowPtr(hwnd, QWL_USER, pPrintSetup);
  186.  
  187.          // fill listbox with print queues
  188.          hwndListbox = WinWindowFromID( hwnd, IDD_PS_LIST+2 );
  189.  
  190.          for( i = 0; i < pPrintSetup->cQueues; i++ )
  191.          {
  192.            // Display printer comment if possible, else use queue name for display.
  193.            psz = *pPrintSetup->pQueueInfo[i].pszComment ? pPrintSetup->pQueueInfo[i].pszComment : pPrintSetup->pQueueInfo[i].pszName;
  194.  
  195.            index = (LONG) WinSendMsg( hwndListbox, LM_INSERTITEM, (MPARAM)LIT_END, (MPARAM)psz );
  196.  
  197.            if( 0 == strcmp( pPrintSetup->pQueueInfo[i].pszName, pPrintSetup->szPreferredQueue ))
  198.            {
  199.              // Hilight preferred queue.
  200.              WinSendMsg( hwndListbox, LM_SELECTITEM, (MPARAM)index, (MPARAM)TRUE );
  201.            }
  202.          }
  203.          if (pPrintSetup->cQueues)
  204.             WinEnableControl(hwnd, IDD_PS_LIST+3, TRUE);
  205.          break;
  206.  
  207.       case WM_COMMAND:
  208.          switch(SHORT1FROMMP(mp1))
  209.          {
  210.             case IDD_PS_LIST+3:
  211.                hwndListbox = WinWindowFromID( hwnd, IDD_PS_LIST+2 );
  212.                ConfigurePrinter(hwndListbox, pPrintSetup);
  213.                return (MRESULT) FALSE;
  214.  
  215.             default:
  216.                return (MRESULT) FALSE;
  217.          }
  218.  
  219.       case WM_CONTROL:
  220.          if (SHORT1FROMMP(mp1) == IDD_PS_LIST+2 &&
  221.              SHORT2FROMMP(mp1) == LN_ENTER)
  222.             ConfigurePrinter((HWND) mp2, pPrintSetup);
  223.          break;
  224.  
  225.       case WM_DESTROY:
  226.          hwndListbox = WinWindowFromID( hwnd, IDD_PS_LIST+2 );
  227.  
  228.          index = (LONG) WinSendMsg( hwndListbox, LM_QUERYSELECTION, (MPARAM)LIT_FIRST, 0 );
  229.          if (index != LIT_NONE)
  230.          {
  231.             pqi = &pPrintSetup->pQueueInfo[ index ];
  232.  
  233.             if (pPrintSetup->pDriverData)
  234.                free(pPrintSetup->pDriverData);
  235.             pPrintSetup->pDriverData = malloc(pqi->pDriverData->cb);
  236.             memcpy(pPrintSetup->pDriverData, pqi->pDriverData, pqi->pDriverData->cb);
  237.  
  238.             // New preferred queue. Modify the one in the PRINTERSETUP structure.
  239.             strcpy( pPrintSetup->szPreferredQueue, pqi->pszName );
  240.             pPrintSetup->bDirty = TRUE;
  241.          }
  242.          break;
  243.  
  244.       default:
  245.          break;
  246.    }
  247.    return WinDefDlgProc(hwnd, msg, mp1, mp2);
  248. }
  249.  
  250. static void ConfigurePrinter(HWND hwndListbox, PPRINTSETUP pPrintSetup)
  251. {
  252.    int index;
  253.  
  254.    index = (LONG) WinSendMsg( hwndListbox, LM_QUERYSELECTION, (MPARAM)LIT_FIRST, 0 );
  255.    if (index != LIT_NONE)
  256.    {
  257.       CHAR szDriverName[ 64 ];
  258.       CHAR szDeviceName[ 48 ];
  259.       char *pch;
  260.       PPRQINFO3 pqi;
  261.  
  262.       pqi = &pPrintSetup->pQueueInfo[ index ];
  263.  
  264.       // Call DevPostDeviceModes() to present the job setup dialog of the printer driver.
  265.       // pqi->pszDriverName is DRIVER.Device format. Separate them.
  266.  
  267.       strcpy( szDriverName, pqi->pszDriverName );
  268.  
  269.       pch = strchr( szDriverName, '.' );
  270.       if( pch )
  271.       {
  272.         strcpy( szDeviceName, pch+1 );
  273.         *pch = 0;
  274.       }
  275.       else
  276.         *szDeviceName = 0;
  277.  
  278.       // There may be more than one printer on this print queue
  279.       pch = strchr( pqi->pszPrinters, ',' );
  280.       if( pch )
  281.         *pch = 0;
  282.  
  283.       // Present the job properties dialog to the user.
  284.       DevPostDeviceModes( pPrintSetup->hab,
  285.                           pqi->pDriverData,
  286.                           szDriverName, szDeviceName,
  287.                           pqi->pszPrinters,
  288.                           DPDM_POSTJOBPROP );
  289.       pPrintSetup->bDirty = TRUE;
  290.    }
  291.  
  292.    return;
  293. }
  294.  
  295. /*-----------------------------------------------------------------------------
  296.  | Funktionsname:
  297.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  298.  | Beschreibung:
  299.  |
  300.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  301.  | Parameter:
  302.  |
  303.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  304.  | Rückgabewerte:
  305.  |
  306.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  307.  | Sonstiges:
  308.  |
  309.  +---------------------------------------------------------------------------*/
  310.  
  311. static MRESULT EXPENTRY PSBordersProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  312. {
  313.    PPRINTSETUP pPrintSetup = WinQueryWindowPtr(hwnd, QWL_USER);
  314.    LONG lTemp;
  315.  
  316.    switch(msg)
  317.    {
  318.       case WM_INITDLG:
  319.          pPrintSetup = (PPRINTSETUP) mp2;
  320.          WinSetWindowPtr(hwnd, QWL_USER, pPrintSetup);
  321.  
  322.          WinSendDlgItemMsg(hwnd, IDD_PS_BORDERS+5, SPBM_SETARRAY,
  323.                            BorderValues, MPFROMSHORT(NumBorderValues));
  324.          WinSendDlgItemMsg(hwnd, IDD_PS_BORDERS+5, SPBM_SETCURRENTVALUE,
  325.                            MPFROMLONG(pPrintSetup->lLeft), NULL);
  326.          WinSendDlgItemMsg(hwnd, IDD_PS_BORDERS+6, SPBM_SETARRAY,
  327.                            BorderValues, MPFROMSHORT(NumBorderValues));
  328.          WinSendDlgItemMsg(hwnd, IDD_PS_BORDERS+6, SPBM_SETCURRENTVALUE,
  329.                            MPFROMLONG(pPrintSetup->lRight), NULL);
  330.          WinSendDlgItemMsg(hwnd, IDD_PS_BORDERS+7, SPBM_SETARRAY,
  331.                            BorderValues, MPFROMSHORT(NumBorderValues));
  332.          WinSendDlgItemMsg(hwnd, IDD_PS_BORDERS+7, SPBM_SETCURRENTVALUE,
  333.                            MPFROMLONG(pPrintSetup->lTop), NULL);
  334.          WinSendDlgItemMsg(hwnd, IDD_PS_BORDERS+8, SPBM_SETARRAY,
  335.                            BorderValues, MPFROMSHORT(NumBorderValues));
  336.          WinSendDlgItemMsg(hwnd, IDD_PS_BORDERS+8, SPBM_SETCURRENTVALUE,
  337.                            MPFROMLONG(pPrintSetup->lBottom), NULL);
  338.          break;
  339.  
  340.       case WM_COMMAND:
  341.          return (MRESULT) FALSE;
  342.  
  343.       case WM_DESTROY:
  344.          lTemp = QuerySpinValue(WinWindowFromID(hwnd, IDD_PS_BORDERS+5));
  345.          if (pPrintSetup->lLeft != lTemp)
  346.          {
  347.             pPrintSetup->lLeft = lTemp;
  348.             pPrintSetup->bDirty = TRUE;
  349.          }
  350.          lTemp = QuerySpinValue(WinWindowFromID(hwnd, IDD_PS_BORDERS+6));
  351.          if (pPrintSetup->lRight != lTemp)
  352.          {
  353.             pPrintSetup->lRight = lTemp;
  354.             pPrintSetup->bDirty = TRUE;
  355.          }
  356.          lTemp = QuerySpinValue(WinWindowFromID(hwnd, IDD_PS_BORDERS+7));
  357.          if (pPrintSetup->lTop != lTemp)
  358.          {
  359.             pPrintSetup->lTop = lTemp;
  360.             pPrintSetup->bDirty = TRUE;
  361.          }
  362.          lTemp = QuerySpinValue(WinWindowFromID(hwnd, IDD_PS_BORDERS+8));
  363.          if (pPrintSetup->lBottom != lTemp)
  364.          {
  365.             pPrintSetup->lBottom = lTemp;
  366.             pPrintSetup->bDirty = TRUE;
  367.          }
  368.          break;
  369.  
  370.       default:
  371.          break;
  372.    }
  373.    return WinDefDlgProc(hwnd, msg, mp1, mp2);
  374. }
  375.  
  376. static LONG QuerySpinValue(HWND hwnd)
  377. {
  378.    LONG lTemp=0;
  379.    char pchTemp[10];
  380.  
  381.    if (WinSendMsg(hwnd, SPBM_QUERYVALUE, pchTemp, MPFROM2SHORT(sizeof(pchTemp), SPBQ_ALWAYSUPDATE)))
  382.    {
  383.       /* Wert im Array suchen */
  384.       while (lTemp < NumBorderValues && strcmp(pchTemp, BorderValues[lTemp]))
  385.          lTemp++;
  386.  
  387.       if (lTemp >= NumBorderValues)
  388.          lTemp = 0;
  389.    }
  390.    return lTemp;
  391. }
  392.  
  393. /*-----------------------------------------------------------------------------
  394.  | Funktionsname:
  395.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  396.  | Beschreibung:
  397.  |
  398.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  399.  | Parameter:
  400.  |
  401.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  402.  | Rückgabewerte:
  403.  |
  404.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  405.  | Sonstiges:
  406.  |
  407.  +---------------------------------------------------------------------------*/
  408.  
  409. static MRESULT EXPENTRY PSFontsProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  410. {
  411.    PPRINTSETUP pPrintSetup = WinQueryWindowPtr(hwnd, QWL_USER);
  412.  
  413.    switch(msg)
  414.    {
  415.       case WM_INITDLG:
  416.          pPrintSetup = (PPRINTSETUP) mp2;
  417.          WinSetWindowPtr(hwnd, QWL_USER, pPrintSetup);
  418.  
  419.          if (pPrintSetup->pchHeaderFont[0])
  420.             WinSendDlgItemMsg(hwnd, IDD_PS_FONTS+3, FDM_SETFONT, pPrintSetup->pchHeaderFont, NULL);
  421.          if (pPrintSetup->pchTextFont[0])
  422.             WinSendDlgItemMsg(hwnd, IDD_PS_FONTS+4, FDM_SETFONT, pPrintSetup->pchTextFont, NULL);
  423.          break;
  424.  
  425.       case WM_COMMAND:
  426.          return (MRESULT) FALSE;
  427.  
  428.       case WM_CONTROL:
  429.          switch(SHORT1FROMMP(mp1))
  430.          {
  431.             case IDD_PS_FONTS+3: /* Header-Font */
  432.                if (SHORT2FROMMP(mp1) == FDN_FONTCHANGED)
  433.                {
  434.                   WinSendMsg((HWND)mp2, FDM_QUERYFONT, pPrintSetup->pchHeaderFont,
  435.                              MPFROMLONG(sizeof(pPrintSetup->pchHeaderFont)));
  436.                   pPrintSetup->bDirty = TRUE;
  437.                }
  438.                if (SHORT2FROMMP(mp1) == FDN_OPEN)
  439.                {
  440.                   if (GetFontByDlg(hwnd, pPrintSetup, pPrintSetup->pchHeaderFont, IDD_PS_FONTS+3) == DID_OK)
  441.                   {
  442.                      WinSendMsg((HWND)mp2, FDM_SETFONT, pPrintSetup->pchHeaderFont, NULL);
  443.                      pPrintSetup->bDirty = TRUE;
  444.                   }
  445.                }
  446.                break;
  447.  
  448.             case IDD_PS_FONTS+4: /* Text-Font */
  449.                if (SHORT2FROMMP(mp1) == FDN_FONTCHANGED)
  450.                {
  451.                   WinSendMsg((HWND)mp2, FDM_QUERYFONT, pPrintSetup->pchTextFont,
  452.                              MPFROMLONG(sizeof(pPrintSetup->pchTextFont)));
  453.                   pPrintSetup->bDirty = TRUE;
  454.                }
  455.                if (SHORT2FROMMP(mp1) == FDN_OPEN)
  456.                {
  457.                   if (GetFontByDlg(hwnd, pPrintSetup, pPrintSetup->pchTextFont, IDD_PS_FONTS+4) == DID_OK)
  458.                   {
  459.                      WinSendMsg((HWND)mp2, FDM_SETFONT, pPrintSetup->pchTextFont, NULL);
  460.                      pPrintSetup->bDirty = TRUE;
  461.                   }
  462.                }
  463.                break;
  464.          }
  465.          break;
  466.  
  467.       default:
  468.          break;
  469.    }
  470.    return WinDefDlgProc(hwnd, msg, mp1, mp2);
  471. }
  472.  
  473. /*-----------------------------------------------------------------------------
  474.  | Funktionsname:
  475.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  476.  | Beschreibung:
  477.  |
  478.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  479.  | Parameter:
  480.  |
  481.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  482.  | Rückgabewerte:
  483.  |
  484.  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  485.  | Sonstiges:
  486.  |
  487.  +---------------------------------------------------------------------------*/
  488.  
  489. static MRESULT EXPENTRY PSOutputProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  490. {
  491.    PPRINTSETUP pPrintSetup = WinQueryWindowPtr(hwnd, QWL_USER);
  492.    ULONG ulTemp;
  493.  
  494.    switch(msg)
  495.    {
  496.       case WM_INITDLG:
  497.          pPrintSetup = (PPRINTSETUP) mp2;
  498.          WinSetWindowPtr(hwnd, QWL_USER, pPrintSetup);
  499.  
  500.          if (pPrintSetup->ulOutput & OUTPUT_AREA)
  501.             WinCheckButton(hwnd, IDD_PS_OUTPUT+2, TRUE);
  502.          if (pPrintSetup->ulOutput & OUTPUT_DATE)
  503.             WinCheckButton(hwnd, IDD_PS_OUTPUT+3, TRUE);
  504.          if (pPrintSetup->ulOutput & OUTPUT_ATTRIB)
  505.             WinCheckButton(hwnd, IDD_PS_OUTPUT+4, TRUE);
  506.          if (pPrintSetup->ulOutput & OUTPUT_PAGENUM)
  507.             WinCheckButton(hwnd, IDD_PS_OUTPUT+5, TRUE);
  508.          break;
  509.  
  510.       case WM_COMMAND:
  511.          return (MRESULT) FALSE;
  512.  
  513.       case WM_DESTROY:
  514.          ulTemp = 0;
  515.          if (WinQueryButtonCheckstate(hwnd, IDD_PS_OUTPUT+2))
  516.             ulTemp |= OUTPUT_AREA;
  517.          if (WinQueryButtonCheckstate(hwnd, IDD_PS_OUTPUT+3))
  518.             ulTemp |= OUTPUT_DATE;
  519.          if (WinQueryButtonCheckstate(hwnd, IDD_PS_OUTPUT+4))
  520.             ulTemp |= OUTPUT_ATTRIB;
  521.          if (WinQueryButtonCheckstate(hwnd, IDD_PS_OUTPUT+5))
  522.             ulTemp |= OUTPUT_PAGENUM;
  523.          if (pPrintSetup->ulOutput != ulTemp)
  524.          {
  525.             pPrintSetup->ulOutput = ulTemp;
  526.             pPrintSetup->bDirty = TRUE;
  527.          }
  528.          break;
  529.  
  530.       default:
  531.          break;
  532.    }
  533.    return WinDefDlgProc(hwnd, msg, mp1, mp2);
  534. }
  535.  
  536. ULONG InitPrintSetup(PPRINTSETUP pPrintSetup, HAB hab)
  537. {
  538.    pPrintSetup->hab = hab;
  539.    pPrintSetup->lWorldCoordinates = PU_LOMETRIC;
  540.  
  541.    return SetupPrinter(pPrintSetup);
  542. }
  543.  
  544. ULONG TermPrintSetup(PPRINTSETUP pPrintSetup)
  545. {
  546.    return CleanupPrinter(pPrintSetup);
  547. }
  548.  
  549. static LONG GetFontByDlg(HWND hwndOwner, PPRINTSETUP pPrintSetup, char *pchFont, ULONG idFontDisp)
  550. {
  551.    FONTDLG FontDlg;
  552.    char pchFamily[FACESIZE+5]="";
  553.    long lTemp;
  554.    FONTMETRICS FontMetrics;
  555.    HPS hps;
  556.  
  557.    hps = WinGetPS(WinWindowFromID(hwndOwner, idFontDisp));
  558.  
  559.    GpiQueryFontMetrics(hps, sizeof(FontMetrics), &FontMetrics);
  560.  
  561.    strcpy(pchFamily, FontMetrics.szFamilyname);
  562.  
  563.    WinReleasePS(hps);
  564.  
  565.    lTemp = strtol(pchFont, NULL, 10);
  566.  
  567.    memset(&FontDlg, 0, sizeof(FontDlg));
  568.  
  569.    FontDlg.cbSize = sizeof(FontDlg);
  570.    FontDlg.hpsPrinter = pPrintSetup->hpsPrinterInfo;
  571.    FontDlg.pszFamilyname = pchFamily;
  572.    FontDlg.usFamilyBufLen = sizeof(pchFamily);
  573.    FontDlg.fxPointSize = MAKEFIXED(lTemp, 0);
  574.    FontDlg.fl = FNTS_CENTER | FNTS_VECTORONLY;
  575.    FontDlg.flFlags = FNTF_NOVIEWSCREENFONTS;
  576.    FontDlg.clrFore = CLR_BLACK;
  577.    FontDlg.clrBack = CLR_WHITE;
  578.  
  579.    WinFontDlg(HWND_DESKTOP, hwndOwner, &FontDlg);
  580.  
  581.    if (FontDlg.lReturn == DID_OK)
  582.    {
  583.       sprintf(pchFont, "%d.%s", (int) FIXEDINT(FontDlg.fxPointSize), FontDlg.fAttrs.szFacename);
  584.    }
  585.  
  586.    return FontDlg.lReturn;
  587. }
  588. /*-------------------------------- Modulende --------------------------------*/
  589.  
  590.