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

1.1     ! root        1: /****************************************************************************/
        !             2: /*                                                                          */
        !             3: /*                         Microsoft Confidential                           */
        !             4: /*                                                                          */
        !             5: /*                 Copyright (c) Microsoft Corp.  1987, 1990                */
        !             6: /*                           All Rights Reserved                            */
        !             7: /*                                                                          */
        !             8: /****************************************************************************/
        !             9: /****************************** Module Header *******************************
        !            10: * Module Name: viewwp.c
        !            11: *
        !            12: * Contains routines that handle the View window.
        !            13: *
        !            14: * History:
        !            15: *
        !            16: * 07/17/91 -  - Created.
        !            17: *
        !            18: ****************************************************************************/
        !            19: 
        !            20: #include "imagedit.h"
        !            21: #include "dialogs.h"
        !            22: 
        !            23: 
        !            24: /*
        !            25:  * Style of the view window. */
        !            26: #define VIEWSTYLE       (WS_POPUP | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU)
        !            27: 
        !            28: 
        !            29: STATICFN VOID NEAR ViewChar(UINT uiChar);
        !            30: 
        !            31: 
        !            32: static INT gViewBackMargin;     // Margin of background within view window.
        !            33: 
        !            34: 
        !            35: 
        !            36: /****************************************************************************
        !            37: * ViewCreate
        !            38: *
        !            39: * This function creates the View window.
        !            40: *
        !            41: * History:
        !            42: *
        !            43: ****************************************************************************/
        !            44: 
        !            45: VOID ViewCreate(VOID)
        !            46: {
        !            47:     INT x;
        !            48:     INT y;
        !            49:     INT cxDummy;
        !            50:     INT cyDummy;
        !            51:     RECT rc;
        !            52:     BOOL fMaximized;
        !            53: 
        !            54:     gViewBackMargin = GetSystemMetrics(SM_CXVSCROLL) / 2;
        !            55: 
        !            56:     /*
        !            57:      * Get the saved position of the Toolbox.  Note that we throw away
        !            58:      * the size fields, because we will calculate the required size
        !            59:      * later based on the image size.
        !            60:      */
        !            61:     if (!ReadWindowPos(szViewPos, &x, &y, &cxDummy, &cyDummy, &fMaximized)) {
        !            62:         /*
        !            63:          * The previous position of the View window couldn't be found.
        !            64:          * Position the window to the right side of the editor, just
        !            65:          * below the Toolbox.
        !            66:          */
        !            67:         if (ghwndToolbox) {
        !            68:             GetWindowRect(ghwndToolbox, &rc);
        !            69:             x = rc.left;
        !            70:             y = rc.bottom + (2 * PALETTEMARGIN);
        !            71:         }
        !            72:         else {
        !            73:             /*
        !            74:              * Last resort.  Position it in the upper left corner
        !            75:              * of the screen if the Toolbox cannot be found.  This
        !            76:              * is unlikely because if the previous position of the
        !            77:              * View window could not be found, this implies that
        !            78:              * the editor has not been run before on this machine.
        !            79:              * If this is true, the toolbox will come up by default
        !            80:              * before this routine is called.  But just in case...
        !            81:              */
        !            82:             x = 2 * PALETTEMARGIN;
        !            83:             y = 2 * PALETTEMARGIN;
        !            84:         }
        !            85:     }
        !            86: 
        !            87:     if (!(ghwndView = CreateWindow(szViewClass, NULL, VIEWSTYLE,
        !            88:             x, y, 0, 0, ghwndMain, NULL, ghInst, NULL)))
        !            89:         return;
        !            90: }
        !            91: 
        !            92: 
        !            93: 
        !            94: /****************************************************************************
        !            95: * ViewShow
        !            96: *
        !            97: * This function shows or hides the view window.
        !            98: *
        !            99: * History:
        !           100: *
        !           101: ****************************************************************************/
        !           102: 
        !           103: VOID ViewShow(
        !           104:     BOOL fShow)
        !           105: {
        !           106:     if (fShow) {
        !           107:         /*
        !           108:          * Only show it if there is an image to display!
        !           109:          */
        !           110:         if (gpImageCur)
        !           111:             ShowWindow(ghwndView, SW_SHOWNA);
        !           112:     }
        !           113:     else {
        !           114:         ShowWindow(ghwndView, SW_HIDE);
        !           115:     }}
        !           116: 
        !           117: 
        !           118: 
        !           119: /****************************************************************************
        !           120: * ViewUpdate
        !           121: *
        !           122: * This function updates the view window.  It should be called any time that
        !           123: * the image changes (is drawn upon).
        !           124: *
        !           125: * History:
        !           126: *
        !           127: ****************************************************************************/
        !           128: 
        !           129: VOID ViewUpdate(VOID)
        !           130: {
        !           131:     InvalidateRect(ghwndView, NULL, TRUE);
        !           132: 
        !           133:     /*
        !           134:      * Update the workspace window also, because it must always
        !           135:      * match the state of the View window.
        !           136:      */
        !           137:     WorkUpdate();
        !           138: }
        !           139: 
        !           140: 
        !           141: 
        !           142: /****************************************************************************
        !           143: * ViewReset
        !           144: *
        !           145: * This function resets the view window, sizing it to fit a new
        !           146: * image.  It should be called any time that the current image
        !           147: * is changed to another one.
        !           148: *
        !           149: * History:
        !           150: *
        !           151: ****************************************************************************/
        !           152: 
        !           153: VOID ViewReset(VOID)
        !           154: {
        !           155:     RECT rc;
        !           156:     RECT rcT;
        !           157: 
        !           158:     GetWindowRect(ghwndView, &rc);
        !           159: 
        !           160:     rcT.left = 0;
        !           161:     rcT.top = 0;
        !           162:     rcT.right = PALETTEMARGIN + gViewBackMargin +
        !           163:             gpImageCur->cx + gViewBackMargin + PALETTEMARGIN;
        !           164:     rcT.bottom = PALETTEMARGIN + gViewBackMargin +
        !           165:             gpImageCur->cy + gViewBackMargin + PALETTEMARGIN;
        !           166:     AdjustWindowRect(&rcT, VIEWSTYLE, FALSE);
        !           167: 
        !           168:     rc.right = rc.left + (rcT.right - rcT.left);
        !           169:     rc.bottom = rc.top + (rcT.bottom - rcT.top);
        !           170:     FitRectToScreen(&rc);
        !           171: 
        !           172:     SetWindowPos(ghwndView, NULL, rc.left, rc.top,
        !           173:             rc.right - rc.left, rc.bottom - rc.top,
        !           174:             SWP_NOACTIVATE | SWP_NOZORDER);
        !           175: 
        !           176:     /*
        !           177:      * If the user wants it, show the View window now.
        !           178:      */
        !           179:     if (gfShowView)
        !           180:         ViewShow(TRUE);
        !           181: 
        !           182:     ViewUpdate();
        !           183: 
        !           184:     /*
        !           185:      * Clear out the propbar size and position fields, because they
        !           186:      * probably show the wrong information now.
        !           187:      */
        !           188:     PropBarClearPos();
        !           189:     PropBarClearSize();
        !           190: }
        !           191: 
        !           192: 
        !           193: 
        !           194: /****************************************************************************
        !           195: * ViewWndProc
        !           196: *
        !           197: * This is the window procedure for the view window.
        !           198: *
        !           199: * History:
        !           200: *
        !           201: ****************************************************************************/
        !           202: 
        !           203: WINDOWPROC ViewWndProc(
        !           204:     HWND hwnd,
        !           205:     UINT msg,
        !           206:     WPARAM wParam,
        !           207:     LPARAM lParam)
        !           208: {
        !           209:     switch (msg) {
        !           210:         case WM_CREATE:
        !           211:             {
        !           212:                 HMENU hmenu = GetSystemMenu(hwnd, FALSE);
        !           213: 
        !           214:                 RemoveMenu(hmenu, 7, MF_BYPOSITION);    // Second separator.
        !           215:                 RemoveMenu(hmenu, 5, MF_BYPOSITION);    // First separator.
        !           216: 
        !           217:                 RemoveMenu(hmenu, SC_RESTORE, MF_BYCOMMAND);
        !           218:                 RemoveMenu(hmenu, SC_SIZE, MF_BYCOMMAND);
        !           219:                 RemoveMenu(hmenu, SC_MINIMIZE, MF_BYCOMMAND);
        !           220:                 RemoveMenu(hmenu, SC_MAXIMIZE, MF_BYCOMMAND);
        !           221:                 RemoveMenu(hmenu, SC_TASKLIST, MF_BYCOMMAND);
        !           222:             }
        !           223: 
        !           224:             return 0;
        !           225: 
        !           226:         case  WM_PAINT:
        !           227:             {
        !           228:                 HDC hdc;
        !           229:                 PAINTSTRUCT ps;
        !           230:                 HBRUSH hbrOld;
        !           231:                 RECT rc;
        !           232: 
        !           233:                 hdc = BeginPaint(hwnd, &ps);
        !           234: 
        !           235:                 /*
        !           236:                  * The view window should not be showing if there
        !           237:                  * is not an image to view!
        !           238:                  */
        !           239:                 if (gpImageCur) {
        !           240:                     DrawMarginBorder(hwnd, hdc);
        !           241: 
        !           242:                     GetClientRect(hwnd, &rc);
        !           243:                     hbrOld = SelectObject(hdc, ghbrScreen);
        !           244:                     PatBlt(hdc, PALETTEMARGIN + 1, PALETTEMARGIN + 1,
        !           245:                             rc.right - (PALETTEMARGIN * 2) - 2,
        !           246:                             rc.bottom - (PALETTEMARGIN * 2) - 2,
        !           247:                             PATCOPY);
        !           248:                     SelectObject(hdc, hbrOld);
        !           249: 
        !           250:                     BitBlt(hdc, PALETTEMARGIN + gViewBackMargin,
        !           251:                             PALETTEMARGIN + gViewBackMargin,
        !           252:                             gcxImage, gcyImage, ghdcImage, 0, 0, SRCCOPY);
        !           253:                 }
        !           254: 
        !           255:                 EndPaint(hwnd, &ps);
        !           256:             }
        !           257: 
        !           258:             break;
        !           259: 
        !           260:         case WM_ACTIVATE:
        !           261:             if (LOWORD(wParam))
        !           262:                 gidCurrentDlg = DID_VIEW;
        !           263: 
        !           264:             break;
        !           265: 
        !           266:         case WM_LBUTTONDOWN:
        !           267:             SetScreenColor(gargbCurrent[giColorLeft]);
        !           268:             break;
        !           269: 
        !           270:         case WM_CHAR:
        !           271:             ViewChar(wParam);
        !           272:             break;
        !           273: 
        !           274:         case WM_CLOSE:
        !           275:             /*
        !           276:              * The user closed the view window from the system menu.
        !           277:              * Hide the window (we don't actually destroy it so
        !           278:              * that it will appear in the same spot when they show
        !           279:              * it again).
        !           280:              */
        !           281:             ViewShow(FALSE);
        !           282:             gfShowView = FALSE;
        !           283:             break;
        !           284: 
        !           285:         case WM_DESTROY:
        !           286:             {
        !           287:                 RECT rc;
        !           288: 
        !           289:                 /*
        !           290:                  * Save the position of the toolbox.
        !           291:                  */
        !           292:                 GetWindowRect(hwnd, &rc);
        !           293:                 WriteWindowPos(&rc, FALSE, szViewPos);
        !           294: 
        !           295:                 /*
        !           296:                  * Null out the global window handle for the view window
        !           297:                  * for safety's sake.
        !           298:                  */
        !           299:                 ghwndView = NULL;
        !           300:             }
        !           301: 
        !           302:             break;
        !           303: 
        !           304:         default:
        !           305:             return DefWindowProc(hwnd, msg, wParam, lParam);
        !           306:     }
        !           307: 
        !           308:     return 0;
        !           309: }
        !           310: 
        !           311: 
        !           312: 
        !           313: /************************************************************************
        !           314: * ViewChar
        !           315: *
        !           316: * Handles WM_CHAR messages for the view window.  Currently this just
        !           317: * includes the '+' and '-' keys, which are used to cycle through all
        !           318: * the possible screen colors.
        !           319: *
        !           320: * Arguments:
        !           321: *
        !           322: * History:
        !           323: *
        !           324: ************************************************************************/
        !           325: 
        !           326: STATICFN VOID NEAR ViewChar(
        !           327:     UINT uiChar)
        !           328: {
        !           329:     INT i;
        !           330:     INT iNext;
        !           331: 
        !           332:     switch (uiChar) {
        !           333:         /*
        !           334:          * Advance to the next screen color.
        !           335:          */
        !           336:         case '+':
        !           337:             iNext = 0;
        !           338:             for (i = 0; i < 16; i++) {
        !           339:                 if (grgbScreen == gargbDefaultColor[i]) {
        !           340:                     iNext = i + 1;
        !           341:                     break;
        !           342:                 }
        !           343:             }
        !           344: 
        !           345:             if (iNext >= 16)
        !           346:                 iNext = 0;
        !           347: 
        !           348:             SetScreenColor(gargbDefaultColor[iNext]);
        !           349: 
        !           350:             break;
        !           351: 
        !           352:         /*
        !           353:          * Back up to the prior screen color.
        !           354:          */
        !           355:         case '-':
        !           356:             iNext = 16 - 1;
        !           357:             for (i = 0; i < 16; i++) {
        !           358:                 if (grgbScreen == gargbDefaultColor[i]) {
        !           359:                     iNext = i - 1;
        !           360:                     break;
        !           361:                 }
        !           362:             }
        !           363: 
        !           364:             if (iNext < 0)
        !           365:                 iNext = 16 - 1;
        !           366: 
        !           367:             SetScreenColor(gargbDefaultColor[iNext]);
        !           368: 
        !           369:             break;
        !           370:     }
        !           371: }
        !           372: 
        !           373: 
        !           374: 
        !           375: /****************************************************************************
        !           376: * ViewSetPixel
        !           377: *
        !           378: * This function colors a pixel in the View window directly.  It is
        !           379: * provided as an optimization when drawing a point.  The ghdcImage
        !           380: * bitmap must be updated as well or the image on the screen will
        !           381: * get out of synch with it.
        !           382: *
        !           383: * History:
        !           384: *
        !           385: ****************************************************************************/
        !           386: 
        !           387: VOID ViewSetPixel(
        !           388:     INT x,
        !           389:     INT y,
        !           390:     INT nBrushSize)
        !           391: {
        !           392:     HDC hDC;
        !           393:     HBRUSH hbrOld;
        !           394:     INT Size;
        !           395:     INT SizeX;
        !           396:     INT SizeY;
        !           397: 
        !           398:     hDC = GetDC(ghwndView);
        !           399:     hbrOld = SelectObject(hDC, ghbrDrawSolid);
        !           400:     SizeX = x - nBrushSize / 2;
        !           401:     SizeY = y - nBrushSize / 2;
        !           402:     PatBlt(hDC, PALETTEMARGIN + gViewBackMargin + (SizeX >= 0 ? SizeX : 0),
        !           403:             PALETTEMARGIN + gViewBackMargin + (SizeY >=  0 ? SizeY :  0),
        !           404:             ((Size = gcxImage - SizeX) >= nBrushSize ?
        !           405:             nBrushSize : Size),
        !           406:             ((Size = gcyImage - SizeY) >= nBrushSize ?
        !           407:             nBrushSize : Size), PATCOPY);
        !           408:     SelectObject(hDC, hbrOld);
        !           409:     ReleaseDC(ghwndView, hDC);
        !           410: }
        !           411: 
        !           412: 
        !           413: 
        !           414: /****************************************************************************
        !           415: * DrawMarginBorder
        !           416: *
        !           417: *
        !           418: * History:
        !           419: *
        !           420: ****************************************************************************/
        !           421: 
        !           422: VOID DrawMarginBorder(
        !           423:     HWND hwnd,
        !           424:     HDC hdc)
        !           425: {
        !           426:     HBRUSH hbrOld;
        !           427:     HPEN hpenOld;
        !           428:     RECT rc;
        !           429: 
        !           430:     GetClientRect(hwnd, &rc);
        !           431:     hpenOld = SelectObject(hdc, GetStockObject(BLACK_PEN));
        !           432:     hbrOld = SelectObject(hdc, GetStockObject(NULL_BRUSH));
        !           433:     Rectangle(hdc, PALETTEMARGIN, PALETTEMARGIN,
        !           434:             rc.right - PALETTEMARGIN,
        !           435:             rc.bottom - PALETTEMARGIN);
        !           436:     SelectObject(hdc, hpenOld);
        !           437:     SelectObject(hdc, hbrOld);
        !           438: }
        !           439: 
        !           440: 
        !           441: 
        !           442: /****************************************************************************
        !           443: * DrawSunkenRect
        !           444: *
        !           445: *
        !           446: * History:
        !           447: *
        !           448: ****************************************************************************/
        !           449: 
        !           450: VOID DrawSunkenRect(
        !           451:     PRECT prc,
        !           452:     HDC hdc)
        !           453: {
        !           454:     HPEN hpenOld;
        !           455: 
        !           456:     hpenOld = SelectObject(hdc, hpenDarkGray);
        !           457:     MoveToEx(hdc, prc->left, prc->top, NULL);
        !           458:     LineTo(hdc, prc->right - 1, prc->top);
        !           459:     MoveToEx(hdc, prc->left, prc->top, NULL);
        !           460:     LineTo(hdc, prc->left, prc->bottom - 1);
        !           461: 
        !           462:     SelectObject(hdc, GetStockObject(WHITE_PEN));
        !           463:     MoveToEx(hdc, prc->left + 1, prc->bottom - 1, NULL);
        !           464:     LineTo(hdc, prc->right, prc->bottom - 1);
        !           465:     MoveToEx(hdc, prc->right - 1, prc->top + 1, NULL);
        !           466:     LineTo(hdc, prc->right - 1, prc->bottom - 1);
        !           467: 
        !           468:     SelectObject(hdc, hpenOld);
        !           469: }

unix.superglobalmegacorp.com

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