Annotation of q_a/samples/printer/printer.c, revision 1.1

1.1     ! root        1: /******************************************************************************\
        !             2: *
        !             3: *  PROGRAM:     PRINTER.C
        !             4: *
        !             5: *  PURPOSE:     To demonstrate the printing of graphics & fonts in Win32.
        !             6: *               Also allows a user to enumerate all system printers
        !             7: *               (and graphically lists all info returned by EnumPrinters),
        !             8: *               print various graphics & fonts to each one, and to query
        !             9: *               the device capablities for each printer and the display.
        !            10: *
        !            11: *  FUNTIONS:    WinMain()          - register class, create windows,
        !            12: *                                    msg loop
        !            13: *               MainWndProc()      - processes main window msgs
        !            14: *               InvalidateClient() - invalidates client area, excluding
        !            15: *                                    toolbar
        !            16: *
        !            17: \******************************************************************************/
        !            18: 
        !            19: #include <windows.h>
        !            20: #include "lookup.h"
        !            21: #include "printer.h"
        !            22: #include "paint.h"
        !            23: #include "toolbar.h"
        !            24: #include "vars.h"
        !            25: 
        !            26: 
        !            27: 
        !            28: /******************************************************************************\
        !            29: *
        !            30: *  FUNCTION:    WinMain (standard WinMain INPUTS/RETURNS)
        !            31: *
        !            32: *  GLOBAL VARS: hInst    - current program instance handle
        !            33: *               hWndMain - handle of the main standard window
        !            34: *
        !            35: *  LOCAL VARS:  wc  - class initial;ization struct
        !            36: *               msg - msg to get/dispatch
        !            37: *
        !            38: *  COMMENTS:    Standard WinMain: registers a class, creates a window,
        !            39: *               creates a toolbar for the window, does a msg loop, then
        !            40: *               terminates.
        !            41: *
        !            42: \******************************************************************************/
        !            43: 
        !            44: int APIENTRY WinMain (HANDLE hInstance, HANDLE hPrevInstance,
        !            45:                      LPSTR  lpCmdLine, int    nCmdShow)
        !            46: {
        !            47:   WNDCLASS  wc;
        !            48:   MSG msg;
        !            49: 
        !            50:   wc.style        = CS_HREDRAW | CS_VREDRAW;
        !            51:   wc.lpfnWndProc   = (WNDPROC)MainWndProc;
        !            52:   wc.cbClsExtra    = 0;
        !            53:   wc.cbWndExtra    = 0;
        !            54:   wc.hInstance    = hInstance;
        !            55:   wc.hIcon        = LoadIcon(hInstance, "printericon");
        !            56:   wc.hCursor      = LoadCursor(NULL, IDC_ARROW);
        !            57:   wc.hbrBackground = GetStockObject(WHITE_BRUSH);
        !            58:   wc.lpszMenuName  = "PrinterMenu";
        !            59:   wc.lpszClassName = "PrinterSampleClass";
        !            60: 
        !            61:   if (!RegisterClass(&wc))
        !            62:     return 0;
        !            63: 
        !            64:   hInst = hInstance;
        !            65:   CreateWindow ("PrinterSampleClass", "PRINTER Sample App",
        !            66:                WS_OVERLAPPEDWINDOW,
        !            67:                CW_USEDEFAULT, CW_USEDEFAULT,
        !            68:                CW_USEDEFAULT, CW_USEDEFAULT,
        !            69:                NULL, NULL, hInstance, NULL);
        !            70: 
        !            71:   if (!hWndMain)
        !            72:       return 0;
        !            73: 
        !            74:   if (!CreateDialog (hInst, (LPTSTR)"PrinterToolbar", hWndMain,
        !            75:                     (DLGPROC) ToolbarProc))
        !            76:     MessageBox (NULL, "CreateDialog failed", "Err!", MB_OK);
        !            77: 
        !            78:   ShowWindow   (hWndMain, nCmdShow);
        !            79:   UpdateWindow (hWndMain);
        !            80: 
        !            81:   while (GetMessage(&msg, NULL,NULL,NULL))
        !            82:   {
        !            83:     TranslateMessage(&msg);
        !            84:     DispatchMessage(&msg);
        !            85:   }
        !            86:   return (msg.wParam);
        !            87: }
        !            88: 
        !            89: 
        !            90: 
        !            91: /******************************************************************************\
        !            92: *
        !            93: *  FUNCTION:   MainWndProc (standard window procedure INPUTS/RETURNS)
        !            94: *
        !            95: *  GLOBAL VARS: hInst             - current program instance handle
        !            96: *              iMapMode           - current map mode (eg. MM_TEXT)
        !            97: *               dwGraphicsOptions - current graphics to draw in client
        !            98: *                                   area
        !            99: *
        !           100: *  LOCAL VARS: hMenu            - handle of main menu
        !           101: *              hMapModesSubMenu - handle of "Map modes" submenu
        !           102: *              hGraphicsSubMenu - handle of "Graphics" submenu
        !           103: *              wLastMapMode     - menu id corresponding to last map mode
        !           104: *
        !           105: *  COMMENTS:   The value of the iMapMode and dwGraphicsOptions variables
        !           106: *               determines the output when the Paint() routine is called
        !           107: *               in the WM_PAINT procedure.
        !           108: *
        !           109: \******************************************************************************/
        !           110: 
        !           111: LONG APIENTRY MainWndProc (HWND hWnd, UINT message,UINT wParam,LONG lParam)
        !           112: {
        !           113:   static HMENU hMenu, hMapModesSubMenu, hGraphicsSubMenu;
        !           114:   static WORD  wLastMapMode;
        !           115: 
        !           116:   switch (message)
        !           117:   {
        !           118:     case WM_COMMAND:
        !           119: 
        !           120:       switch (LOWORD(wParam))
        !           121:       {
        !           122:        case IDM_HIENGLISH:
        !           123:        case IDM_HIMETRIC:
        !           124:        case IDM_LOENGLISH:
        !           125:        case IDM_LOMETRIC:
        !           126:        case IDM_TWIPS:
        !           127:        case IDM_ISOTROPIC:
        !           128:        case IDM_ANISOTROPIC:
        !           129:        case IDM_TEXT:
        !           130: 
        !           131:          /********************************************************************\
        !           132:           *  Uncheck the last map mode menuitem, check the new map mode
        !           133:          *  menuitem, set iMapMode according to menu id, and invalidate
        !           134:           *  the client area so it'll be redrawn.
        !           135:          \********************************************************************/
        !           136: 
        !           137:           CheckMenuItem (hMapModesSubMenu, wLastMapMode,
        !           138:                           MF_UNCHECKED | MF_BYCOMMAND);
        !           139:           CheckMenuItem (hMapModesSubMenu, LOWORD(wParam),
        !           140:                           MF_CHECKED | MF_BYCOMMAND);
        !           141:          iMapMode = iLookupWord (iMapModesLkUpW, LOWORD(wParam),
        !           142:                                  MAX_MAPMODES);
        !           143:          InvalidateClient ();
        !           144:          wLastMapMode = LOWORD(wParam);
        !           145:          break;
        !           146: 
        !           147:        case IDM_ARC:
        !           148:        case IDM_ELLIPSE:
        !           149:        case IDM_LINETO:
        !           150:        case IDM_PIE:
        !           151:        case IDM_POLYBEZIER:
        !           152:        case IDM_POLYGON:
        !           153:        case IDM_POLYLINE:
        !           154:        case IDM_POLYPOLYGON:
        !           155:        case IDM_RECTANGLE:
        !           156:        case IDM_ROUNDRECT:
        !           157:        case IDM_STRETCHBLT:
        !           158:        case IDM_TEXTOUT:
        !           159:        {
        !           160:          /********************************************************************\
        !           161:           *  Retrieve the DWORD flag value for the particular menuitem,
        !           162:           *  toggle (un/check) the menuitem, set/clear the flag in
        !           163:           *  dwGraphicsOptions, and invalidate the client area so it'll
        !           164:           *  be redrawn.
        !           165:          \********************************************************************/
        !           166: 
        !           167:          DWORD dwGraphic = dwLookupWord (dwGraphicsLkUpW, LOWORD(wParam),
        !           168:                                          MAX_GRAPHICS);
        !           169: 
        !           170:           if (GetMenuState (hGraphicsSubMenu, LOWORD(wParam),
        !           171:                                         MF_BYCOMMAND) & MF_CHECKED)
        !           172:           { dwGraphicsOptions &= ~dwGraphic;
        !           173:             CheckMenuItem (hGraphicsSubMenu, LOWORD(wParam),
        !           174:                             MF_UNCHECKED | MF_BYCOMMAND);
        !           175:           }
        !           176:           else
        !           177:           {
        !           178:            /******************************************************************\
        !           179:             *  Clear/uncheck the ENUMFONTS flag/menuitem
        !           180:            \******************************************************************/
        !           181: 
        !           182:             dwGraphicsOptions &= ~ENUMFONTS;
        !           183:             CheckMenuItem (hGraphicsSubMenu, IDM_ENUMFONTS,
        !           184:                            MF_UNCHECKED | MF_BYCOMMAND);
        !           185: 
        !           186:             dwGraphicsOptions |= dwGraphic;
        !           187:             CheckMenuItem (hGraphicsSubMenu, LOWORD(wParam),
        !           188:                             MF_CHECKED | MF_BYCOMMAND);
        !           189:          }
        !           190:          InvalidateClient ();
        !           191:          break;
        !           192:         }
        !           193:        case IDM_ALLGRAPHICS:
        !           194:        {
        !           195:          UINT i;
        !           196: 
        !           197:           /********************************************************************\
        !           198:           *  Clear/uncheck the ENUMFONTS flag/menuitem, set/check all
        !           199:           *  other graphics flags/menuitems, and invalidate the client
        !           200:           *  area so it'll be repainted.
        !           201:           \********************************************************************/
        !           202: 
        !           203:           dwGraphicsOptions = 0;
        !           204:           CheckMenuItem (hGraphicsSubMenu, IDM_ENUMFONTS,
        !           205:                           MF_UNCHECKED | MF_BYCOMMAND);
        !           206: 
        !           207:          for (i = 0; i < MAX_GRAPHICS; i++)
        !           208:           { CheckMenuItem (hGraphicsSubMenu, IDM_ARC + i,
        !           209:                             MF_CHECKED | MF_BYCOMMAND);
        !           210:            dwGraphicsOptions |= dwLookupWord (dwGraphicsLkUpW,
        !           211:                                                (WORD) (IDM_ARC+i),
        !           212:                                               MAX_GRAPHICS);
        !           213:           }
        !           214:          InvalidateClient ();
        !           215:          break;
        !           216:         }
        !           217:        case IDM_NOGRAPHICS:
        !           218:        {
        !           219:          UINT i;
        !           220: 
        !           221:           /********************************************************************\
        !           222:           *  Clear/uncheck all graphics flags/menuitems, and invalidate
        !           223:           *  the client area so it'll be repainted.
        !           224:           \********************************************************************/
        !           225: 
        !           226:          for (i = 0; i < MAX_GRAPHICS; i++)
        !           227:             CheckMenuItem (hGraphicsSubMenu, IDM_ARC + i,
        !           228:                            MF_UNCHECKED | MF_BYCOMMAND);
        !           229: 
        !           230:          dwGraphicsOptions = 0;
        !           231: 
        !           232:          InvalidateClient ();
        !           233:          break;
        !           234:         }
        !           235:        case IDM_ENUMFONTS:
        !           236:        {
        !           237:           /********************************************************************\
        !           238:           *  Set/clear ENUMFONTS flag, toggle (un/check) menuitem, if
        !           239:           *  checking IDM_ENUMFONTS then uncheck all other items, and
        !           240:           *  invalidate the client area so it'll be repainted.
        !           241:           \********************************************************************/
        !           242: 
        !           243:           if (GetMenuState (hGraphicsSubMenu, IDM_ENUMFONTS,
        !           244:                                         MF_BYCOMMAND) & MF_CHECKED)
        !           245:           { dwGraphicsOptions = 0;
        !           246:             CheckMenuItem (hGraphicsSubMenu, IDM_ENUMFONTS,
        !           247:                             MF_UNCHECKED | MF_BYCOMMAND);
        !           248:           }
        !           249:           else
        !           250:          { SendMessage (hWnd, WM_COMMAND, IDM_NOGRAPHICS, 0);
        !           251: 
        !           252:             dwGraphicsOptions = ENUMFONTS;
        !           253:             CheckMenuItem (hGraphicsSubMenu, IDM_ENUMFONTS,
        !           254:                             MF_CHECKED | MF_BYCOMMAND);
        !           255:           }
        !           256:          InvalidateClient ();
        !           257:          break;
        !           258:         }
        !           259:       }
        !           260:       break;
        !           261: 
        !           262:     case WM_PAINT:
        !           263:     {
        !           264:       PAINTSTRUCT ps;
        !           265:       RECT rect;
        !           266:       HDC  hdc = BeginPaint (hWnd, &ps);
        !           267: 
        !           268:       GetClientRect (hWnd, &rect);
        !           269: 
        !           270:       if (iMapMode == MM_TEXT || iMapMode == MM_ANISOTROPIC)
        !           271: 
        !           272:        SetViewportOrgEx (hdc, 0, TOOLBARHEIGHT, NULL);
        !           273: 
        !           274:       else
        !           275: 
        !           276:        SetViewportOrgEx (hdc, 0, rect.bottom, NULL);
        !           277: 
        !           278:       rect.bottom -= TOOLBARHEIGHT;
        !           279:       SetMapMode (hdc, iMapMode);
        !           280:       Paint (hdc, &rect);
        !           281:       EndPaint (hWnd, &ps);
        !           282:       break;
        !           283:     }
        !           284:     case WM_CREATE:
        !           285: 
        !           286:       hWndMain = hWnd;
        !           287:       hMenu = GetMenu (hWnd);
        !           288:       hMapModesSubMenu = GetSubMenu (hMenu, 0);
        !           289:       hGraphicsSubMenu = GetSubMenu (hMenu, 1);
        !           290:       SendMessage (hWnd, WM_COMMAND, (DWORD) MAKELONG (IDM_TEXT,0), 0);
        !           291:       SendMessage (hWnd, WM_COMMAND,
        !           292:                    (DWORD) MAKELONG (IDM_ALLGRAPHICS,0), 0);
        !           293:       break;
        !           294: 
        !           295:     case WM_DESTROY:
        !           296: 
        !           297:       PostQuitMessage(0);
        !           298:       break;
        !           299: 
        !           300:     default:
        !           301: 
        !           302:       return (DefWindowProc(hWnd, message, wParam, lParam));
        !           303:   }
        !           304:   return (NULL);
        !           305: }
        !           306: 
        !           307: 
        !           308: 
        !           309: /******************************************************************************\
        !           310: *
        !           311: *  FUNCTION:    InvalidateClient
        !           312: *
        !           313: *  GLOBAL VARS: hWndMain - main app window handle
        !           314: *
        !           315: *  COMMENTS:    Eliminates the flashing of the toolbar when we redraw
        !           316: *
        !           317: \******************************************************************************/
        !           318: 
        !           319: void InvalidateClient ()
        !           320: {
        !           321:   RECT r;
        !           322: 
        !           323:   GetClientRect (hWndMain, &r);
        !           324: 
        !           325:   r.top += TOOLBARHEIGHT;
        !           326: 
        !           327:   InvalidateRect (hWndMain, &r, TRUE);
        !           328: }

unix.superglobalmegacorp.com

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