Annotation of mstools/samples/printer/getcaps.c, revision 1.1.1.1

1.1       root        1: /******************************************************************************\
                      2: *
                      3: *  PROGRAM:     GETCAPS.C
                      4: *
                      5: *  PURPOSE:     Handles display of information returned by call to
                      6: *               GetDeviceCaps. GetDeviceCaps is called for the
                      7: *               currently selected deivce (in the tool bar comobobox),
                      8: *               and the results are formatted and displayed in a dialog
                      9: *               box.
                     10: *
                     11: *  FUNTIONS:    GetDeviceCapsDlgProc - handles messages for dialog
                     12: *               DisplayDeviceCapsInfo- retrieves device caps info
                     13: *               TranslateDeviceCaps  - displays a capability in listbox
                     14: *               ComplexDeviceCapsLine- formats a bitfield capability
                     15: *
                     16: *
                     17: *                           Microsoft Developer Support
                     18: *                     Copyright (c) 1992 Microsoft Corporation
                     19: *
                     20: \******************************************************************************/
                     21: 
                     22: #include <windows.h>
                     23: #include <winspool.h>
                     24: #include <string.h>
                     25: #include <stdio.h>
                     26: #include <winspool.h>
                     27: #include "common.h"
                     28: #include "getcaps.h"
                     29: 
                     30: 
                     31: 
                     32: /******************************************************************************\
                     33: *
                     34: *  FUNCTION:    GetDeviceCapsDlgProc (standard dialog procedure INPUTS/RETURNS)
                     35: *
                     36: *  COMMENTS:    Processes messages for GetDeviceCaps dialog box
                     37: *
                     38: \******************************************************************************/
                     39: 
                     40: LRESULT CALLBACK   GetDeviceCapsDlgProc (HWND   hwnd, UINT msg, WPARAM wParam,
                     41:                                          LPARAM lParam)
                     42: {
                     43:   switch (msg)
                     44:   {
                     45:     case WM_INITDIALOG:
                     46:     {
                     47:       BOOL bReturn;
                     48:       char buf[BUFSIZE];
                     49: 
                     50:       ghwndDevCaps = hwnd;
                     51: 
                     52:       //
                     53:       // shove all the caps info in the list box
                     54:       //
                     55: 
                     56:       SetCursor (LoadCursor (NULL, IDC_WAIT));
                     57:       bReturn = DisplayDeviceCapsInfo ();
                     58:       SetCursor (LoadCursor (NULL, IDC_ARROW));
                     59: 
                     60:       if (!bReturn)
                     61:       {
                     62:         EndDialog (hwnd, TRUE);
                     63:       }
                     64: 
                     65:       //
                     66:       // set window title to reflect current device
                     67:       //
                     68: 
                     69:       else
                     70:       {
                     71:         sprintf (buf, "GetDeviceCaps: %s;%s;%s", gszDeviceName, gszPort,
                     72:                  gszDriverName);
                     73: 
                     74:         SetWindowText (hwnd, (LPCSTR) buf);
                     75:       }
                     76: 
                     77:       break;
                     78:     }
                     79: 
                     80:     case WM_COMMAND:
                     81: 
                     82:       switch (LOWORD (wParam))
                     83:       {
                     84:         case DID_OK:
                     85: 
                     86:           EndDialog (hwnd, TRUE);
                     87:           return 1;
                     88:       }
                     89:       break;
                     90:   }
                     91:   return 0;
                     92: }
                     93: 
                     94: 
                     95: 
                     96: /******************************************************************************\
                     97: *
                     98: *  FUNCTION:    DisplayDeviceCapsInfo
                     99: *
                    100: *  RETURNS:     TRUE if successful,
                    101: *               FALSE otherwise
                    102: *
                    103: *  COMMENTS:    Retrieves all device caps for current deivce & calls
                    104: *                 TranslateCaps to insert them in the dialog's listbox.
                    105: *
                    106: \******************************************************************************/
                    107: 
                    108: BOOL DisplayDeviceCapsInfo ()
                    109: {
                    110:   HDC hdc;
                    111:   int i, iValue;
                    112: 
                    113:   if (!strcmp (gszDeviceName, "Display"))
                    114:   {
                    115:     if (!(hdc = GetDC (ghwndDevCaps)))
                    116:     {
                    117:       ErrMsgBox ("GetDC failed", ERR_MOD_NAME);
                    118:       return FALSE;
                    119:     }
                    120:   }
                    121: 
                    122:   else
                    123:   {
                    124:     if (!(hdc = CreateDC (gszDriverName, gszDeviceName, gszPort, NULL)))
                    125:     {
                    126:       char buf[BUFSIZE];
                    127: 
                    128:       sprintf (buf, "CreateDC (%s, %s, %s, NULL) failed",
                    129:                gszDriverName, gszDeviceName, gszPort);
                    130:       ErrMsgBox (buf, ERR_MOD_NAME);
                    131:       return FALSE;
                    132:     }
                    133:   }
                    134: 
                    135:   for (i = 0; i < MAX_DEVICE_CAPS; i++)
                    136:   {
                    137:     iValue = GetDeviceCaps (hdc, gaCaps[i].iValue);
                    138:     TranslateDeviceCaps (i, gaCaps[i].iValue, iValue);
                    139:   }
                    140:   DeleteDC (hdc);
                    141: 
                    142:   return TRUE;
                    143: }
                    144: 
                    145: 
                    146: 
                    147: /******************************************************************************\
                    148: *
                    149: *  FUNCTION:    TranslateDeviceCaps
                    150: *
                    151: *  INPUTS:      arrayIndex - index into gaCaps[]
                    152: *               capIndex   - devcap index (eg. TECHNOLOGY, CURVECAPS)
                    153: *               iValue     - value returned by GetDeviceCaps
                    154: *
                    155: *  COMMENTS:    For simple devcaps (eg. tjose with single numeric return
                    156: *               value), appends caps value to string and inserts into
                    157: *               listbox. For "complex" caps (those returning multiple
                    158: *               bit-values) calls ComplexCapsLine which handles text
                    159: *               formattting & insertion.
                    160: *
                    161: \******************************************************************************/
                    162: 
                    163: void TranslateDeviceCaps (int arrayIndex, int capIndex, int iValue)
                    164: {
                    165:   char buf[BUFSIZE];
                    166: 
                    167:   strcpy (buf, gaCaps[arrayIndex].szValue);
                    168: 
                    169:   switch (capIndex)
                    170:   {
                    171:     case TECHNOLOGY:
                    172: 
                    173:       ComplexDeviceCapsLine (buf, gaTechnologyCaps, MAX_TECHNOLOGY_CAPS,
                    174:                              iValue);
                    175:       break;
                    176: 
                    177:     case CURVECAPS:
                    178: 
                    179:       ComplexDeviceCapsLine (buf, gaCurveCaps, MAX_CURVE_CAPS, iValue);
                    180:       break;
                    181: 
                    182:     case LINECAPS:
                    183: 
                    184:       ComplexDeviceCapsLine (buf, gaLineCaps, MAX_LINE_CAPS, iValue);
                    185:       break;
                    186: 
                    187:     case POLYGONALCAPS:
                    188: 
                    189:       ComplexDeviceCapsLine (buf, gaPolygonCaps, MAX_POLYGON_CAPS, iValue);
                    190:       break;
                    191: 
                    192:     case TEXTCAPS:
                    193: 
                    194:       ComplexDeviceCapsLine (buf, gaTextCaps, MAX_TEXT_CAPS, iValue);
                    195:       break;
                    196: 
                    197:     case CLIPCAPS:
                    198: 
                    199:       ComplexDeviceCapsLine (buf, gaClipCaps, MAX_CLIP_CAPS, iValue);
                    200:       break;
                    201: 
                    202:     case RASTERCAPS:
                    203: 
                    204:       ComplexDeviceCapsLine (buf, gaRasterCaps, MAX_RASTER_CAPS, iValue);
                    205:       break;
                    206: 
                    207:     default:
                    208: 
                    209:       wsprintf(buf, gaCaps[arrayIndex].szValue, iValue);
                    210: 
                    211:       SendDlgItemMessage (ghwndDevCaps, DID_LISTBOX, LB_INSERTSTRING,
                    212:                           (UINT)-1, (LONG) buf);
                    213:       break;
                    214:   }
                    215: }
                    216: 
                    217: 
                    218: 
                    219: /******************************************************************************\
                    220: *
                    221: *  FUNCTION:     ComplexDeviceCapsLine
                    222: *
                    223: *  INPUTS:       pbuf        - pointer to buffer containing a cap-type
                    224: *                              string
                    225: *                pLkUp       - pointer to a CAPSLOOKUP table
                    226: *                iMaxEntries - # of enries in table pointed at by pLkUp
                    227: *                iValue      - an integer containing 1+ bit-value flags.
                    228: *
                    229: *  COMMENTS:     This function is used to expand an int containing
                    230: *                multiple bit-values into a set of strings which are
                    231: *                inserted into the DevCapsDlg listbox. The iValue
                    232: *                parameter is checked against each iIndex entry in the
                    233: *                CAPSLOOKUP table pointed at by pLkUp, and when matches
                    234: *                are found the corresponding (lpszValue) string is
                    235: *                inserted.
                    236: *
                    237: *                The buffer pointed to by pbuf will be destroyed.
                    238: *
                    239: \******************************************************************************/
                    240: 
                    241: void ComplexDeviceCapsLine (char *pbuf, CAPSLOOKUP *pLkUp, int iMaxEntries,
                    242:                      int iValue)
                    243: {
                    244:   int  i;
                    245:   BOOL bNewLine = FALSE;
                    246: 
                    247:   for (i = 0; i < iMaxEntries; i++)
                    248: 
                    249:     if (iValue & (pLkUp + i)->iValue)
                    250:     {
                    251:       if (bNewLine)
                    252:       {
                    253:         //
                    254:         // Keep the first symbolic constant on the same line as the
                    255:         //   cap type, eg:  "TECHNOLOGY:     DT_RASDISPLAY".
                    256:         //
                    257: 
                    258:         strcpy (pbuf, BLANKS);
                    259:         strcat (pbuf, (pLkUp + i)->szValue);
                    260:       }
                    261:       else
                    262:       {
                    263:         //
                    264:         // Put symbolic constant on new line, eg:
                    265:         //                  "                DT_RASPRINTER".
                    266:         //
                    267: 
                    268:         strcat (pbuf, (pLkUp + i)->szValue);
                    269:         bNewLine = TRUE;
                    270:       }
                    271:       SendDlgItemMessage (ghwndDevCaps, DID_LISTBOX, LB_INSERTSTRING,
                    272:                           (UINT)-1, (LONG) pbuf);
                    273:    }
                    274: }

unix.superglobalmegacorp.com

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