Annotation of mstools/samples/sdktools/imagedit/menucmd.c, revision 1.1

1.1     ! root        1: /****************************************************************************/
        !             2: /*                                                                          */
        !             3: /*                         Microsoft Confidential                           */
        !             4: /*                                                                          */
        !             5: /*                 Copyright (c) Microsoft Corp.  1987, 1991                */
        !             6: /*                           All Rights Reserved                            */
        !             7: /*                                                                          */
        !             8: /****************************************************************************/
        !             9: /****************************** Module Header *******************************
        !            10: * Module Name: menucmd.c
        !            11: *
        !            12: * Contains routines to dispatch the menu commands.
        !            13: *
        !            14: * History:
        !            15: *
        !            16: ****************************************************************************/
        !            17: 
        !            18: #include "imagedit.h"
        !            19: #include "dialogs.h"
        !            20: #include "ids.h"
        !            21: 
        !            22: #include <direct.h>
        !            23: #include <string.h>
        !            24: 
        !            25: STATICFN INT GetHelpContext(INT idSubject, PHELPMAP phmap);
        !            26: 
        !            27: 
        !            28: 
        !            29: /************************************************************************
        !            30: * InitMenu
        !            31: *
        !            32: * This function grays/enables and checks/unchecks the menu items
        !            33: * appropriately for the given state.
        !            34: *
        !            35: * Arguments:
        !            36: *   HMENU hMenu - The menu handle.
        !            37: *
        !            38: * History:
        !            39: *
        !            40: ************************************************************************/
        !            41: 
        !            42: VOID InitMenu(
        !            43:     HMENU hMenu)
        !            44: {
        !            45:     BOOL fEnable;
        !            46:     INT i;
        !            47: 
        !            48:     MyEnableMenuItem(hMenu, MENU_FILE_SAVE, fImageDirty || fFileDirty);
        !            49:     MyEnableMenuItem(hMenu, MENU_FILE_SAVEAS, gpImageHead);
        !            50:     MyEnableMenuItem(hMenu, MENU_FILE_LOADCOLORS, gnColors != 2);
        !            51:     MyEnableMenuItem(hMenu, MENU_FILE_SAVECOLORS, gnColors != 2);
        !            52: 
        !            53:     /*
        !            54:      * Only enable the option to restore the default colors if this
        !            55:      * is not a monochrome palette and at least one of the colors
        !            56:      * has been changed.
        !            57:      */
        !            58:     fEnable = FALSE;
        !            59:     if (gnColors != 2) {
        !            60:         for (i = 0; i < COLORSMAX; i++) {
        !            61:             if (gargbColor[i] != gargbDefaultColor[i]) {
        !            62:                 fEnable = TRUE;
        !            63:                 break;
        !            64:             }
        !            65:         }
        !            66:     }
        !            67: 
        !            68:     MyEnableMenuItem(hMenu, MENU_FILE_DEFAULTCOLORS, fEnable);
        !            69: 
        !            70:     MyEnableMenuItem(hMenu, MENU_EDIT_UNDO, ghbmUndo);
        !            71:     MyEnableMenuItem(hMenu, MENU_EDIT_RESTORE,
        !            72:             gpImageCur && gpImageCur->DIBPtr && fImageDirty);
        !            73:     MyEnableMenuItem(hMenu, MENU_EDIT_COPY, gpImageCur);
        !            74:     MyEnableMenuItem(hMenu, MENU_EDIT_PASTE,
        !            75:             gpImageCur && IsClipboardFormatAvailable(CF_BITMAP));
        !            76:     MyEnableMenuItem(hMenu, MENU_EDIT_CLEAR, gpImageCur);
        !            77: 
        !            78:     /*
        !            79:      * We can add new images if the current image is not a bitmap,
        !            80:      * and we have possible new images to add, and there is a current
        !            81:      * file being edited.  This last case is checked by looking to
        !            82:      * see that there is either a current file name, or there is a
        !            83:      * current image (the case for new files).
        !            84:      */
        !            85:     MyEnableMenuItem(hMenu, MENU_EDIT_NEWIMAGE,
        !            86:             giType != FT_BITMAP &&
        !            87:             ((giType == FT_ICON) ?
        !            88:             (gnImages < gnIconDevices) : (gnImages < gnCursorDevices)) &&
        !            89:             (gpImageCur || gpszFileName));
        !            90: 
        !            91:     MyEnableMenuItem(hMenu, MENU_EDIT_SELECTIMAGE,
        !            92:             giType != FT_BITMAP && gnImages > 0);
        !            93:     MyEnableMenuItem(hMenu, MENU_EDIT_DELETEIMAGE,
        !            94:             giType != FT_BITMAP && gnImages > 0);
        !            95: 
        !            96:     MyCheckMenuItem(hMenu, MENU_OPTIONS_GRID, gfGrid);
        !            97:     MyCheckMenuItem(hMenu, MENU_OPTIONS_BRUSH2, gnBrushSize == 2);
        !            98:     MyCheckMenuItem(hMenu, MENU_OPTIONS_BRUSH3, gnBrushSize == 3);
        !            99:     MyCheckMenuItem(hMenu, MENU_OPTIONS_BRUSH4, gnBrushSize == 4);
        !           100:     MyCheckMenuItem(hMenu, MENU_OPTIONS_BRUSH5, gnBrushSize == 5);
        !           101:     MyCheckMenuItem(hMenu, MENU_OPTIONS_SHOWCOLOR, gfShowColor);
        !           102:     MyCheckMenuItem(hMenu, MENU_OPTIONS_SHOWVIEW, gfShowView);
        !           103:     MyCheckMenuItem(hMenu, MENU_OPTIONS_SHOWTOOLBOX, gfShowToolbox);
        !           104: }
        !           105: 
        !           106: 
        !           107: 
        !           108: /************************************************************************
        !           109: * MenuCmd
        !           110: *
        !           111: * Dispatches all the menu commands.
        !           112: *
        !           113: * Arguments:
        !           114: *
        !           115: * History:
        !           116: *
        !           117: ************************************************************************/
        !           118: 
        !           119: VOID MenuCmd(
        !           120:     INT item)
        !           121: {
        !           122:     switch (item) {
        !           123: 
        !           124:         /*
        !           125:          * File menu ----------------------------------------------------
        !           126:          */
        !           127: 
        !           128:         case MENU_FILE_OPEN:
        !           129:             if (VerifySaveFile())
        !           130:                 OpenAFile();
        !           131: 
        !           132:             break;
        !           133: 
        !           134:         case MENU_FILE_NEW:
        !           135:             if (VerifySaveFile()) {
        !           136:                 if (DlgBox(DID_RESOURCETYPE,
        !           137:                         (WNDPROC)ResourceTypeDlgProc) == IDOK) {
        !           138:                     /*
        !           139:                      * Clear out the current resource.
        !           140:                      */
        !           141:                     ClearResource();
        !           142: 
        !           143:                     if (iNewFileType == FT_BITMAP)
        !           144:                         DlgBox(DID_BITMAPSIZE, (WNDPROC)BitmapSizeDlgProc);
        !           145:                     else
        !           146:                         ImageNewDialog(iNewFileType);
        !           147:                 }
        !           148:             }
        !           149: 
        !           150:             break;
        !           151: 
        !           152:         case MENU_FILE_SAVE:
        !           153:             SaveFile(FALSE);
        !           154:             break;
        !           155: 
        !           156:         case MENU_FILE_SAVEAS:
        !           157:             SaveFile(TRUE);
        !           158:             break;
        !           159: 
        !           160:         case MENU_FILE_LOADCOLORS:
        !           161:             LoadColorFile();
        !           162:             break;
        !           163: 
        !           164:         case MENU_FILE_SAVECOLORS:
        !           165:             SaveColorFile();
        !           166:             break;
        !           167: 
        !           168:         case MENU_FILE_DEFAULTCOLORS:
        !           169:             RestoreDefaultColors();
        !           170:             break;
        !           171: 
        !           172:         case MENU_FILE_EXIT:
        !           173:             SendMessage(ghwndMain, WM_SYSCOMMAND, SC_CLOSE, 0L);
        !           174:             break;
        !           175: 
        !           176:         /*
        !           177:          * Edit menu ----------------------------------------------------
        !           178:          */
        !           179: 
        !           180:         case MENU_EDIT_UNDO:
        !           181:             ImageUndo();
        !           182:             break;
        !           183: 
        !           184:         case MENU_EDIT_RESTORE:
        !           185:             /*
        !           186:              * Reopen the most recently retained image (without
        !           187:              * prompting for a save).
        !           188:              */
        !           189:             ImageOpen2(gpImageCur);
        !           190:             break;
        !           191: 
        !           192:         case MENU_EDIT_COPY:
        !           193:             CopyImageClip();
        !           194:             break;
        !           195: 
        !           196:         case MENU_EDIT_PASTE:
        !           197:             PasteImageClip();
        !           198:             break;
        !           199: 
        !           200:         case MENU_EDIT_CLEAR:
        !           201:             ImageUpdateUndo();
        !           202:             ImageDCClear();
        !           203:             ViewUpdate();
        !           204:             break;
        !           205: 
        !           206:         case MENU_EDIT_NEWIMAGE:
        !           207:             ImageNewDialog(giType);
        !           208:             break;
        !           209: 
        !           210:         case MENU_EDIT_SELECTIMAGE:
        !           211:             ImageSelectDialog();
        !           212:             break;
        !           213: 
        !           214:         case MENU_EDIT_DELETEIMAGE:
        !           215:             ImageDelete();
        !           216:             break;
        !           217: 
        !           218:         /*
        !           219:          * Options menu -------------------------------------------------
        !           220:          */
        !           221: 
        !           222:         case MENU_OPTIONS_GRID:
        !           223:             /*
        !           224:              * Toggle the grid state.
        !           225:              */
        !           226:             gfGrid ^= TRUE;
        !           227: 
        !           228:             /*
        !           229:              * Repaint the workspace window to show/remove the grid.
        !           230:              */
        !           231:             WorkUpdate();
        !           232: 
        !           233:             break;
        !           234: 
        !           235:         case MENU_OPTIONS_BRUSH2:
        !           236:         case MENU_OPTIONS_BRUSH3:
        !           237:         case MENU_OPTIONS_BRUSH4:
        !           238:         case MENU_OPTIONS_BRUSH5:
        !           239:             switch (item) {
        !           240:                 case MENU_OPTIONS_BRUSH2:
        !           241:                     gnBrushSize = 2;
        !           242:                     break;
        !           243: 
        !           244:                 case MENU_OPTIONS_BRUSH3:
        !           245:                     gnBrushSize = 3;
        !           246:                     break;
        !           247: 
        !           248:                 case MENU_OPTIONS_BRUSH4:
        !           249:                     gnBrushSize = 4;
        !           250:                     break;
        !           251: 
        !           252:                 case MENU_OPTIONS_BRUSH5:
        !           253:                     gnBrushSize = 5;
        !           254:                     break;
        !           255:             }
        !           256: 
        !           257:             break;
        !           258: 
        !           259:         case MENU_OPTIONS_SHOWCOLOR:
        !           260:             /*
        !           261:              * Toggle the state of the color palette.
        !           262:              */
        !           263:             gfShowColor = gfShowColor ? FALSE : TRUE;
        !           264:             ColorShow(gfShowColor);
        !           265:             break;
        !           266: 
        !           267:         case MENU_OPTIONS_SHOWVIEW:
        !           268:             /*
        !           269:              * Toggle the state of the view window.
        !           270:              */
        !           271:             gfShowView = gfShowView ? FALSE : TRUE;
        !           272:             ViewShow(gfShowView);
        !           273:             break;
        !           274: 
        !           275:         case MENU_OPTIONS_SHOWTOOLBOX:
        !           276:             /*
        !           277:              * Toggle the state of the Toolbox.
        !           278:              */
        !           279:             gfShowToolbox = gfShowToolbox ? FALSE : TRUE;
        !           280:             ToolboxShow(gfShowToolbox);
        !           281:             break;
        !           282: 
        !           283:         /*
        !           284:          * Help menu ----------------------------------------------------
        !           285:          */
        !           286: 
        !           287:         case MENU_HELP_CONTENTS:
        !           288:             WinHelp(ghwndMain, gszHelpFile, HELP_CONTENTS, 0L);
        !           289:             break;
        !           290: 
        !           291:         case MENU_HELP_SEARCH:
        !           292:             /*
        !           293:              * Tell winhelp to be sure this app's help file is current,
        !           294:              * then invoke a search with an empty starting key.
        !           295:              */
        !           296:             WinHelp(ghwndMain, gszHelpFile, HELP_FORCEFILE, 0);
        !           297:             WinHelp(ghwndMain, gszHelpFile, HELP_PARTIALKEY, (DWORD)(LPSTR)"");
        !           298:             break;
        !           299: 
        !           300:         case MENU_HELP_ABOUT:
        !           301:             DlgBox(DID_ABOUT, (WNDPROC)AboutDlgProc);
        !           302:             break;
        !           303: 
        !           304:         /*
        !           305:          * Hidden menu commands (accessed by accelerators) --------------
        !           306:          */
        !           307: 
        !           308:         case MENU_HIDDEN_TOCOLORPAL:
        !           309:             if (IsWindowVisible(ghwndColor))
        !           310:                 SetFocus(ghwndColor);
        !           311: 
        !           312:             break;
        !           313: 
        !           314:         case MENU_HIDDEN_TOVIEW:
        !           315:             if (IsWindowVisible(ghwndView))
        !           316:                 SetFocus(ghwndView);
        !           317: 
        !           318:             break;
        !           319: 
        !           320:         case MENU_HIDDEN_TOTOOLBOX:
        !           321:             if (IsWindowVisible(ghwndToolbox))
        !           322:                 SetFocus(ghwndToolbox);
        !           323: 
        !           324:             break;
        !           325: 
        !           326:         case MENU_HIDDEN_TOPROPBAR:
        !           327:             SetFocus(ghwndPropBar);
        !           328:             break;
        !           329:     }
        !           330: }
        !           331: 
        !           332: 
        !           333: 
        !           334: /************************************************************************
        !           335: * MsgFilterHookFunc
        !           336: *
        !           337: * This is the exported message filter function that is hooked into
        !           338: * the message stream for detecting the pressing of the F1 key, at
        !           339: * which time it calls up the appropriate help.
        !           340: *
        !           341: * Arguments:
        !           342: *
        !           343: * History:
        !           344: *
        !           345: ************************************************************************/
        !           346: 
        !           347: DWORD  APIENTRY MsgFilterHookFunc(
        !           348:     INT nCode,
        !           349:     WPARAM wParam,
        !           350:     LPMSG lpMsg)
        !           351: {
        !           352:     if ((nCode == MSGF_MENU || nCode == MSGF_DIALOGBOX) &&
        !           353:             (lpMsg->message == WM_KEYDOWN && lpMsg->wParam == VK_F1)) {
        !           354:         /*
        !           355:          * Display help.
        !           356:          */
        !           357:         ShowHelp((nCode == MSGF_MENU) ? TRUE : FALSE);
        !           358: 
        !           359:         /*
        !           360:          * Tell Windows to swallow this message.
        !           361:          */
        !           362:         return 1;
        !           363:     }
        !           364: 
        !           365:     return DefHookProc(nCode, wParam, (LONG)lpMsg, &ghhkMsgFilter);
        !           366: }
        !           367: 
        !           368: 
        !           369: 
        !           370: /************************************************************************
        !           371: * ShowHelp
        !           372: *
        !           373: * This function is called when the user has requested help.  It will
        !           374: * look at the menu state (if fMenuHelp is TRUE) or which dialog
        !           375: * is currently up to determine the help topic, then it calls WinHelp.
        !           376: *
        !           377: * Arguments:
        !           378: *   BOOL fMenuHelp - TRUE if this help is for a menu (help was requested
        !           379: *                    in the menu modal loop).  If FALSE, general help
        !           380: *                    or help for a dialog is assumed.
        !           381: *
        !           382: * History:
        !           383: *
        !           384: ************************************************************************/
        !           385: 
        !           386: VOID ShowHelp(
        !           387:     BOOL fMenuHelp)
        !           388: {
        !           389:     INT nHelpContext = 0;
        !           390:     HWND hwndFocus;
        !           391: 
        !           392:     if (fMenuHelp) {
        !           393:         nHelpContext = GetHelpContext(gMenuSelected, gahmapMenu);
        !           394:     }
        !           395:     else {
        !           396:         /*
        !           397:          * Look for help for the current dialog.
        !           398:          */
        !           399:         if (gidCurrentDlg) {
        !           400:             nHelpContext = GetHelpContext(gidCurrentDlg, gahmapDialog);
        !           401:         }
        !           402:         else {
        !           403:             /*
        !           404:              * There is no current dialog.  Is the window with the
        !           405:              * focus a control on the Properties Bar?
        !           406:              */
        !           407:             if ((hwndFocus = GetFocus()) && IsChild(ghwndPropBar, hwndFocus))
        !           408:                 nHelpContext = GetHelpContext(DID_PROPBAR, gahmapDialog);
        !           409:         }
        !           410:     }
        !           411: 
        !           412:     /*
        !           413:      * If there is help context, display it.  Otherwise display
        !           414:      * the Contents screen.
        !           415:      */
        !           416:     if (nHelpContext)
        !           417:         WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT, nHelpContext);
        !           418:     else
        !           419:         WinHelp(ghwndMain, gszHelpFile, HELP_CONTENTS, 0L);
        !           420: }
        !           421: 
        !           422: 
        !           423: 
        !           424: /************************************************************************
        !           425: * GetHelpContext
        !           426: *
        !           427: * This function takes a subject and returns its matching help
        !           428: * context id from the given HELPMAP table.
        !           429: *
        !           430: * Arguments:
        !           431: *   INT idSubject   - ID of the subject to find the help context for.
        !           432: *   PHELPMAP phmap  - The help map table.  It is assumed that the
        !           433: *                     last entry in the table has a NULL subject id.
        !           434: *
        !           435: * History:
        !           436: *
        !           437: ************************************************************************/
        !           438: 
        !           439: STATICFN INT GetHelpContext(
        !           440:     INT idSubject,
        !           441:     PHELPMAP phmap)
        !           442: {
        !           443:     while (phmap->idSubject) {
        !           444:         if (phmap->idSubject == idSubject)
        !           445:             return phmap->HelpContext;
        !           446: 
        !           447:         phmap++;
        !           448:     }
        !           449: 
        !           450:     return 0;
        !           451: }
        !           452: 
        !           453: 
        !           454: 
        !           455: /************************************************************************
        !           456: * AboutDlgProc
        !           457: *
        !           458: * This is the About Box dialog procedure.
        !           459: *
        !           460: * History:
        !           461: *
        !           462: ************************************************************************/
        !           463: 
        !           464: DIALOGPROC AboutDlgProc(
        !           465:     HWND hwnd,
        !           466:     UINT msg,
        !           467:     WPARAM wParam,
        !           468:     LPARAM lParam)
        !           469: {
        !           470:     switch (msg) {
        !           471:         case WM_INITDIALOG:
        !           472:             {
        !           473:                 CHAR szVersion[CCHTEXTMAX];
        !           474: 
        !           475:                 strcpy(szVersion, ids(IDS_VERSION));
        !           476:                 strcat(szVersion, ids(IDS_VERSIONMINOR));
        !           477: 
        !           478: #ifdef DBG
        !           479:                 strcat(szVersion, " (debug)");
        !           480: #endif
        !           481: 
        !           482:                 SetDlgItemText(hwnd, DID_ABOUTVERSION, szVersion);
        !           483:                 CenterWindow(hwnd);
        !           484:             }
        !           485: 
        !           486:             return TRUE;
        !           487: 
        !           488:         case WM_COMMAND:
        !           489:             EndDialog(hwnd, IDOK);
        !           490:             return TRUE;
        !           491: 
        !           492:         default:
        !           493:             return FALSE;
        !           494:     }
        !           495: }

unix.superglobalmegacorp.com

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