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

1.1     ! root        1: /***************************************************************************
        !             2:  *                                                                         *
        !             3:  *  MODULE      : ICClip.C                                                 *
        !             4:  *                                                                         *
        !             5:  *  DESCRIPTION : Clipboard functions for ImagEdit                         *
        !             6:  *                                                                         *
        !             7:  *  FUNCTIONS   : CopyImageClip ()  - Copies selected portion of image to  *
        !             8:  *                                    the clipboard.                       *
        !             9:  *                                                                         *
        !            10:  *                PasteImageClip () - Pastes the clipboard image to        *
        !            11:  *                                    selected portion of edit image.      *
        !            12:  *                                                                         *
        !            13:  *                                                                         *
        !            14:  *  HISTORY     : 6/21/89 - created by LR                                  *
        !            15:  *                                                                         *
        !            16:  ***************************************************************************/
        !            17: 
        !            18: #include "imagedit.h"
        !            19: #include "dialogs.h"
        !            20: #include "iehelp.h"
        !            21: 
        !            22: 
        !            23: 
        !            24: /*==========================================================================
        !            25:   |ImagEdit's clipboard data is in two formats:                              |
        !            26:   |        a) a standard CF_BITMAP format  and                               |
        !            27:   |        b) a private ImagEdit format described below.                     |
        !            28:   |                                                                          |
        !            29:   |The private ImagEdit format data consists of:                             |
        !            30:   |   1.  a DWORD describing screen color when image was sent to clipboard   |
        !            31:   |       followed by...                                                     |
        !            32:   |   2.  the DIB bits of the monochrome AND image (in ghdcANDMask).         |
        !            33:   |                                                                          |
        !            34:   |The CF_BITMAP format consists of the image bitmap (the combined XOR and   |
        !            35:   |AND images in ghdcImage for icons and cursors).                           |
        !            36:   |                                                                          |
        !            37:   |This information is sufficient to re-create the image correctly during    |
        !            38:   |paste even if the screen viewing color is subsequently changed.           |
        !            39:   |                                                                          |
        !            40:   |Both formats are created if the image being edited is an icon or a cursor.|
        !            41:   |Only the CF_BITMAP format is created if a bitmap is being edited.         |
        !            42:   ==========================================================================*/
        !            43: 
        !            44: /****************************************************************************
        !            45:  *                                                                          *
        !            46:  *  FUNCTION   : BOOL PASCAL CopyImageClip(fBitmap)                         *
        !            47:  *                                                                          *
        !            48:  *  PURPOSE    : Copies the information from the selected area of image to  *
        !            49:  *               the clipboard.                                             *
        !            50:  *                                                                          *
        !            51:  *  SIDE EFFECTS: may change contents of the clipboard. The "pick" or clip  *
        !            52:  *                rectangle is reset to cover the entire image.             *
        !            53:  *                                                                          *
        !            54:  ****************************************************************************/
        !            55: 
        !            56: BOOL CopyImageClip(VOID)
        !            57: {
        !            58:     HCURSOR hcurOld;
        !            59:     HBITMAP hStdBitmap;
        !            60:     HBITMAP hPrivBitmap;
        !            61:     HDC hStdDC;
        !            62:     HDC hPrivDC;
        !            63:     HANDLE hOldSObj;
        !            64:     HANDLE hOldPObj;
        !            65:     HANDLE hPriv;
        !            66:     LPSTR lpPriv;
        !            67: 
        !            68:     hcurOld = SetCursor(hcurWait);
        !            69: 
        !            70:     /* create a temp. bitmap and DC for the standard clipboard format
        !            71:      * along the same lines as the image bitmap
        !            72:      */
        !            73:     hStdDC = CreateCompatibleDC(ghdcImage);
        !            74:     hStdBitmap = MyCreateBitmap(ghdcImage, gcxPick, gcyPick, 16);
        !            75:     hOldSObj = SelectObject(hStdDC, hStdBitmap);
        !            76: 
        !            77:     /* blt the image bits into standard format DC */
        !            78:     BitBlt(hStdDC, 0, 0, gcxPick, gcyPick, ghdcImage,
        !            79:             grcPick.left, grcPick.top, SRCCOPY);
        !            80:     SelectObject(hStdDC, hOldSObj);
        !            81: 
        !            82:     if (giType != FT_BITMAP) {
        !            83:         /* for icons and cursors, create a temp. DC and bitmap for the AND
        !            84:         * mask and blt the mask bits into it.
        !            85:         */
        !            86:         hPrivDC = CreateCompatibleDC(ghdcANDMask);
        !            87:         hPrivBitmap = CreateCompatibleBitmap(ghdcANDMask, gcxPick, gcyPick);
        !            88:         hOldPObj = SelectObject(hPrivDC, hPrivBitmap);
        !            89:         BitBlt(hPrivDC, 0, 0, gcxPick, gcyPick, ghdcANDMask,
        !            90:                 grcPick.left, grcPick.top, SRCCOPY);
        !            91: 
        !            92:         /* Allocate a buffer for the private ImagEdit format */
        !            93:         hPriv = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
        !            94:                 (DWORD)((gcxPick + 31) >> 3) * gcyPick + sizeof(DWORD));
        !            95:         if (!hPriv) {
        !            96:             DeleteDC(hStdDC);
        !            97:             DeleteObject(hStdBitmap);
        !            98:             DeleteDC(hPrivDC);
        !            99:             DeleteObject(hPrivBitmap);
        !           100:             return FALSE;
        !           101:         }
        !           102: 
        !           103:         lpPriv = (LPSTR)GlobalLock(hPriv);
        !           104: 
        !           105:         /* Fill in the first DWORD with the screen color information */
        !           106:         *((DWORD FAR *)lpPriv) = grgbScreen;
        !           107: 
        !           108:         /* Get the mask bits into the buffer */
        !           109:         GetBitmapBits(hPrivBitmap, (DWORD)((gcxPick + 31) >> 3) * gcyPick,
        !           110:                 (LPSTR)lpPriv + sizeof(DWORD));
        !           111: 
        !           112:         SelectObject(hPrivDC, hOldPObj);
        !           113:         DeleteObject(hPrivBitmap);
        !           114:         DeleteDC(hPrivDC);
        !           115:     }
        !           116: 
        !           117:     /* Open clipboard and clear it of it's contents */
        !           118:     if (!OpenClipboard(ghwndMain)) {
        !           119:         DeleteDC(hStdDC);
        !           120:         return(FALSE);
        !           121:     }
        !           122:     EmptyClipboard();
        !           123: 
        !           124:     if (giType != FT_BITMAP) {
        !           125:         /* set the private ImagEdit format data into the clipboard */
        !           126:         if (!SetClipboardData(ClipboardFormat, hPriv)) {
        !           127:             DeleteDC(hStdDC);
        !           128:             GlobalUnlock(hPriv);
        !           129:             GlobalFree(hPriv);
        !           130:             CloseClipboard();
        !           131:             return(FALSE);
        !           132:         }
        !           133:         GlobalUnlock(hPriv);
        !           134:     }
        !           135:     /* set the standard CF_BITMAP format data in the clipboard */
        !           136:     if (!SetClipboardData(CF_BITMAP, hStdBitmap)) {
        !           137:         DeleteDC(hStdDC);
        !           138:         GlobalFree(hPriv);  //   hPriv may not have been initialized (if giType == BITMAP).
        !           139:         CloseClipboard();
        !           140:         return(FALSE);
        !           141:     }
        !           142: 
        !           143:     CloseClipboard();
        !           144:     DeleteDC(hStdDC);
        !           145: 
        !           146:     /*
        !           147:      * Reset pick rectangle to cover entire image.
        !           148:      */
        !           149:     PickSetRect(0, 0, gcxImage - 1, gcyImage - 1);
        !           150: 
        !           151:     /*
        !           152:      * Erase the drag rectangle.
        !           153:      */
        !           154:     WorkUpdate();
        !           155: 
        !           156:     SetCursor(hcurOld);
        !           157: 
        !           158:     return TRUE;
        !           159: }
        !           160: 
        !           161: 
        !           162: 
        !           163: /************************************************************************
        !           164: * PasteImageClip
        !           165: *
        !           166: * Pastes an image from the clipboard to the current image.
        !           167: *
        !           168: * It is assumed that this routine will not be called unless an
        !           169: * image is currently being edited.
        !           170: *
        !           171: * The pick rectangle is reset to cover the entire image if the
        !           172: * paste is successful.
        !           173: *
        !           174: * Basic outline of how Paste is done in ImagEdit.
        !           175: *
        !           176: * Find out what format is available in the clipboard:
        !           177: *    a. CF_BITMAP only
        !           178: *       --------------
        !           179: *       case 1: Pasting to an icon or cursor
        !           180: *                 * We don't have any screen color information.
        !           181: *                   Make the mask bits opaque and blt. the bitmap to
        !           182: *                   ghdcImage.
        !           183: *
        !           184: *       case 2: Pasting to a bitmap
        !           185: *                 * Blt the bitmap to the image DC.
        !           186: *
        !           187: *    b. both ImagEdit and CF_BITMAP
        !           188: *       ---------------------------
        !           189: *       case 1: Pasting to an icon or cursor
        !           190: *                 * Recover the image from the AND and screen color
        !           191: *                   data (in ImagEdit) and the combined image bitmap
        !           192: *                   (in CF_BITMAP). Use the information to make the
        !           193: *                   neccessary changes if the screen viewing color was
        !           194: *                   changed between Copy and Paste.
        !           195: *
        !           196: *       case 2: Pasting to a bitmap
        !           197: *                 * Blt the CF_BITMAP data to the image DC.
        !           198: *
        !           199: * If the destination image differs in dimensions from
        !           200: * source image, the source image is stretched or clipped to that of
        !           201: * destination, depending on preference
        !           202: *
        !           203: * History:
        !           204: *
        !           205: ************************************************************************/
        !           206: 
        !           207: BOOL PasteImageClip(VOID)
        !           208: {
        !           209:     HCURSOR hcurOld;
        !           210:     INT cxClip;
        !           211:     INT cyClip;
        !           212:     INT cxTarget;
        !           213:     INT cyTarget;
        !           214:     INT cxSource;
        !           215:     INT cySource;
        !           216:     DWORD rgbClipScreen;
        !           217:     BOOL fIEFormatFound;
        !           218:     HANDLE hClipData;
        !           219:     LPSTR lpClipData;
        !           220:     BITMAP bmClip;
        !           221:     HDC hdcClip;
        !           222:     HBITMAP hbmClip;
        !           223:     HBITMAP hbmClipOld;
        !           224:     HDC hdcClipAND;
        !           225:     HBITMAP hbmClipAND;
        !           226:     HBITMAP hbmClipANDOld;
        !           227:     HDC hdcClipAND16;
        !           228:     HBITMAP hbmClipAND16;
        !           229:     HBITMAP hbmClipAND16Old;
        !           230:     HDC hdcTarget;
        !           231:     HBITMAP hbmTarget;
        !           232:     HBITMAP hbmTargetOld;
        !           233:     HDC hdcTargetAND16;
        !           234:     HBITMAP hbmTargetAND16;
        !           235:     HBITMAP hbmTargetAND16Old;
        !           236:     HDC hdcTargetAND;
        !           237:     HBITMAP hbmTargetAND;
        !           238:     HBITMAP hbmTargetANDOld;
        !           239: 
        !           240:     hcurOld = SetCursor(hcurWait);
        !           241: 
        !           242:     if (!OpenClipboard(ghwndMain)) {
        !           243:         Message(MSG_NOCLIPBOARD);
        !           244:         goto Error1;
        !           245:     }
        !           246: 
        !           247:     if (!(hbmClip = GetClipboardData(CF_BITMAP))) {
        !           248:         Message(MSG_NOCLIPBOARDFORMAT);
        !           249:         goto Error2;
        !           250:     }
        !           251: 
        !           252:     GetObject(hbmClip, sizeof(BITMAP), (LPSTR)&bmClip);
        !           253:     cxClip = (INT)bmClip.bmWidth;
        !           254:     cyClip = (INT)bmClip.bmHeight;
        !           255: 
        !           256:     /*
        !           257:      * If the dimensions of the current pick rectangle don't match
        !           258:      * the bitmap being pasted, ask the user if they want to stretch
        !           259:      * or clip the pasted image.
        !           260:      */
        !           261:     cxTarget = gcxPick;
        !           262:     cyTarget = gcyPick;
        !           263:     cxSource = cxClip;
        !           264:     cySource = cyClip;
        !           265:     if (gcxPick != cxClip || gcyPick != cyClip) {
        !           266:         if (DlgBox(DID_PASTEOPTIONS, (WNDPROC)PasteOptionsDlgProc) == IDCANCEL) {
        !           267:             goto Error2;
        !           268:         }
        !           269: 
        !           270:         /*
        !           271:          * If clipping and the clipboard dimensions differ from the
        !           272:          * selected pick rectangle, then either the target dimensions
        !           273:          * or the source dimensions need to be sized down.
        !           274:          */
        !           275:         if (!fStretchClipboardData) {
        !           276:             if (cxClip < gcxPick)
        !           277:                 cxTarget = cxClip;
        !           278:             else
        !           279:                 cxSource = gcxPick;
        !           280: 
        !           281:             if (cyClip < gcyPick)
        !           282:                 cyTarget = cyClip;
        !           283:             else
        !           284:                 cySource = gcyPick;
        !           285:         }
        !           286:     }
        !           287: 
        !           288:     /*
        !           289:      * Update the undo buffer now that we are committed to the paste.
        !           290:      */
        !           291:     ImageUpdateUndo();
        !           292: 
        !           293:     /*
        !           294:      * Determine if the private ImagEdit clipboard format is available.
        !           295:      */
        !           296:     fIEFormatFound = IsClipboardFormatAvailable(ClipboardFormat);
        !           297: 
        !           298:     if (giType != FT_BITMAP && fIEFormatFound) {
        !           299:         /*
        !           300:          * Get the AND mask bitmap and the old screen color out of
        !           301:          * the private format.
        !           302:          */
        !           303:         hClipData = GetClipboardData(ClipboardFormat);
        !           304:         lpClipData = (LPSTR)GlobalLock(hClipData);
        !           305:         rgbClipScreen = *((DWORD FAR *)lpClipData);
        !           306:         hdcClipAND = CreateCompatibleDC(ghdcImage);
        !           307:         hbmClipAND = CreateBitmap(cxClip, cyClip, (BYTE)1, (BYTE)1,
        !           308:                 (LPSTR)lpClipData + sizeof(DWORD));
        !           309:         hbmClipANDOld = SelectObject(hdcClipAND, hbmClipAND);
        !           310: 
        !           311:         /*
        !           312:          * Create a color bitmap for temporary use.
        !           313:          */
        !           314:         hdcClipAND16 = CreateCompatibleDC(ghdcImage);
        !           315:         hbmClipAND16 = MyCreateBitmap(ghdcImage, cxSource, cySource, 16);
        !           316:         hbmClipAND16Old = SelectObject(hdcClipAND16, hbmClipAND16);
        !           317: 
        !           318:         /*
        !           319:          * Blt the AND mask onto the color bitmap.
        !           320:          */
        !           321:         BitBlt(hdcClipAND16, 0, 0, cxSource, cySource, hdcClipAND,
        !           322:                 0, 0, SRCCOPY);
        !           323: 
        !           324:         /*
        !           325:          * Create the color target AND mask bitmap.
        !           326:          */
        !           327:         hdcTargetAND16 = CreateCompatibleDC(ghdcImage);
        !           328:         hbmTargetAND16 = MyCreateBitmap(ghdcImage, cxTarget, cyTarget, 16);
        !           329:         hbmTargetAND16Old = SelectObject(hdcTargetAND16, hbmTargetAND16);
        !           330: 
        !           331:         /*
        !           332:          * StretchBlt from the color AND mask bitmap to the color target
        !           333:          * AND mask bitmap.  The blt must be done from a color bitmap to
        !           334:          * a color bitmap, and the stretch blt mode must be set to
        !           335:          * COLORONCOLOR.  All this is necessary so that the AND mask
        !           336:          * stays exactly in sync with the stretch blt of the color
        !           337:          * (XOR) mask.  If these steps are not done correctly, shrinking
        !           338:          * an image with screen colored pixels in it can cause problems,
        !           339:          * because the stretch blt will use a slightly different
        !           340:          * algorithm to compress the monochrome AND mask and the color
        !           341:          * XOR mask.
        !           342:          */
        !           343:         SetStretchBltMode(hdcTargetAND16, COLORONCOLOR);
        !           344:         SetStretchBltMode(hdcClipAND16, COLORONCOLOR);     //
        !           345:         StretchBlt(hdcTargetAND16, 0, 0, cxTarget, cyTarget, hdcClipAND16,
        !           346:                 0, 0, cxSource, cySource, SRCCOPY);
        !           347: 
        !           348:         /*
        !           349:          * Create the monochrome target AND mask bitmap.
        !           350:          */
        !           351:         hdcTargetAND = CreateCompatibleDC(ghdcImage);
        !           352:         hbmTargetAND = MyCreateBitmap(ghdcImage, cxTarget, cyTarget, 2);
        !           353:         hbmTargetANDOld = SelectObject(hdcTargetAND, hbmTargetAND);
        !           354: 
        !           355:         /*
        !           356:          * Blt the color AND mask onto the monochrome AND mask.
        !           357:          * The monochrome AND mask is the one that we will use
        !           358:          * later.  It must be monochrome or the ImageDCSeparate
        !           359:          * and ImageDCCombine functions will not work properly.
        !           360:          */
        !           361:         BitBlt(hdcTargetAND, 0, 0, cxTarget, cyTarget, hdcTargetAND16,
        !           362:                 0, 0, SRCCOPY);
        !           363: 
        !           364:         /*
        !           365:          * Cleanup.
        !           366:          */
        !           367:         SelectObject(hdcTargetAND16, hbmTargetAND16Old);
        !           368:         DeleteObject(hbmTargetAND16);
        !           369:         DeleteDC(hdcTargetAND16);
        !           370:         SelectObject(hdcClipAND16, hbmClipAND16Old);
        !           371:         DeleteObject(hbmClipAND16);
        !           372:         DeleteDC(hdcClipAND16);
        !           373:         SelectObject(hdcClipAND, hbmClipANDOld);
        !           374:         DeleteObject(hbmClipAND);
        !           375:         DeleteDC(hdcClipAND);
        !           376:         GlobalUnlock(hClipData);
        !           377:     }
        !           378: 
        !           379:     /*
        !           380:      * Get the clipboard bitmap into a DC.
        !           381:      */
        !           382:     hdcClip = CreateCompatibleDC(ghdcImage);
        !           383:     hbmClipOld = SelectObject(hdcClip, hbmClip);
        !           384: 
        !           385:     /*
        !           386:      * Create the target bitmap.
        !           387:      */
        !           388:     hdcTarget = CreateCompatibleDC(ghdcImage);
        !           389:     hbmTarget = MyCreateBitmap(ghdcImage, cxTarget, cyTarget, 16);
        !           390:     hbmTargetOld = SelectObject(hdcTarget, hbmTarget);
        !           391: 
        !           392:     /*
        !           393:      * StretchBlt the bitmap onto the target.
        !           394:      */
        !           395:     SetStretchBltMode(hdcTarget, COLORONCOLOR);
        !           396:     SetStretchBltMode(hdcClip, COLORONCOLOR);     //
        !           397:     StretchBlt(hdcTarget, 0, 0, cxTarget, cyTarget, hdcClip, 0, 0,
        !           398:             cxSource, cySource, SRCCOPY);
        !           399: 
        !           400:     /*
        !           401:      * Handle some special cases.
        !           402:      */
        !           403:     if (giType == FT_BITMAP || !fIEFormatFound) {
        !           404:         /*
        !           405:          * The image we are pasting into is either a bitmap, or
        !           406:          * there does not exist an AND mask in the clipboard.
        !           407:          */
        !           408:         if (gnColors == 2) {
        !           409:             /*
        !           410:              * We are pasting to a mono image.  We must convert the
        !           411:              * colors in the clipboard bitmap into monochrome.
        !           412:              */
        !           413:             ImageDCMonoBlt(hdcTarget, cxTarget, cyTarget);
        !           414:         }
        !           415:     }
        !           416:     else {
        !           417:         /*
        !           418:          * We are pasting into an icon or cursor image and we have
        !           419:          * available an AND mask.  Is the current image monochrome?
        !           420:          */
        !           421:         if (gnColors == 2) {
        !           422:             /*
        !           423:              * Remove the old screen/inverse colors from the image,
        !           424:              * convert it to monochrome, then put back in the
        !           425:              * current screen/inverse colors.
        !           426:              */
        !           427:             ImageDCSeparate(hdcTarget, cxTarget, cyTarget, hdcTargetAND,
        !           428:                     rgbClipScreen);
        !           429:             ImageDCMonoBlt(hdcTarget, cxTarget, cyTarget);
        !           430:             ImageDCCombine(hdcTarget, cxTarget, cyTarget, hdcTargetAND);
        !           431:         }
        !           432:         /*
        !           433:          * Does the screen color specified in the clipboard
        !           434:          * differ from the current screen color?
        !           435:          */
        !           436:         else if (rgbClipScreen != grgbScreen) {
        !           437:             /*
        !           438:              * Remove the old screen/inverse colors, then put back
        !           439:              * in the current ones.
        !           440:              */
        !           441:             ImageDCSeparate(hdcTarget, cxTarget, cyTarget, hdcTargetAND,
        !           442:                     rgbClipScreen);
        !           443:             ImageDCCombine(hdcTarget, cxTarget, cyTarget, hdcTargetAND);
        !           444:         }
        !           445:     }
        !           446: 
        !           447:     /*
        !           448:      * Blt the clipboard image to the proper rectangle in the current image.
        !           449:      */
        !           450:     BitBlt(ghdcImage, grcPick.left, grcPick.top,
        !           451:             cxTarget, cyTarget, hdcTarget, 0, 0, SRCCOPY);
        !           452: 
        !           453:     /*
        !           454:      * If the current image is an icon or cursor, we must take care
        !           455:      * of the AND mask also.
        !           456:      */
        !           457:     if (giType != FT_BITMAP) {
        !           458:         /*
        !           459:          * Is there an AND mask in the clipboard to use?
        !           460:          */
        !           461:         if (fIEFormatFound) {
        !           462:             /*
        !           463:              * Blt it into the current image's AND mask.
        !           464:              */
        !           465:             BitBlt(ghdcANDMask, grcPick.left, grcPick.top,
        !           466:                     cxTarget, cyTarget, hdcTargetAND, 0, 0, SRCCOPY);
        !           467:         }
        !           468:         else {
        !           469:             /*
        !           470:              * Make the AND mask opaque, because there is no
        !           471:              * screen color information.
        !           472:              */
        !           473:             PatBlt(ghdcANDMask, grcPick.left, grcPick.top,
        !           474:                     cxTarget, cyTarget, BLACKNESS);
        !           475:         }
        !           476:     }
        !           477: 
        !           478:     /*
        !           479:      * Cleanup.
        !           480:      */
        !           481:     SelectObject(hdcTarget, hbmTargetOld);
        !           482:     DeleteObject(hbmTarget);
        !           483:     DeleteDC(hdcTarget);
        !           484: 
        !           485:     if (giType != FT_BITMAP && fIEFormatFound) {
        !           486:         SelectObject(hdcTargetAND, hbmTargetANDOld);
        !           487:         DeleteObject(hbmTargetAND);
        !           488:         DeleteDC(hdcTargetAND);
        !           489:     }
        !           490: 
        !           491:     SelectObject(hdcClip, hbmClipOld);
        !           492:     DeleteDC(hdcClip);
        !           493: 
        !           494:     CloseClipboard();
        !           495: 
        !           496:     /*
        !           497:      * Update the View and workspace windows.
        !           498:      */
        !           499:     ViewUpdate();
        !           500: 
        !           501:     /*
        !           502:      * Reset pick rectangle to cover entire image.
        !           503:      */
        !           504:     PickSetRect(0, 0, gcxImage - 1, gcyImage - 1);
        !           505: 
        !           506:     fImageDirty = TRUE;
        !           507: 
        !           508:     SetCursor(hcurOld);
        !           509: 
        !           510:     return TRUE;
        !           511: 
        !           512: Error2:
        !           513:     CloseClipboard();
        !           514: 
        !           515: Error1:
        !           516:     SetCursor(hcurOld);
        !           517: 
        !           518:     return FALSE;
        !           519: }
        !           520: 
        !           521: 
        !           522: 
        !           523: /************************************************************************
        !           524: * PasteOptionsDlgProc
        !           525: *
        !           526: * Proc for the dialog that asks the user whether they want to clip
        !           527: * or stretch the bitmap being pasted in.
        !           528: *
        !           529: * Upon return with an IDOK value, the fStretchClipboardData global
        !           530: * will be TRUE if they want to stretch, or FALSE if they want to clip.
        !           531: *
        !           532: * History:
        !           533: *
        !           534: ************************************************************************/
        !           535: 
        !           536: DIALOGPROC PasteOptionsDlgProc(
        !           537:     HWND hwnd,
        !           538:     UINT msg,
        !           539:     WPARAM wParam,
        !           540:     LPARAM lParam)
        !           541: {
        !           542:     switch (msg) {
        !           543:         case WM_INITDIALOG:
        !           544:             CheckRadioButton(hwnd, DID_PASTEOPTIONSSTRETCH,
        !           545:                     DID_PASTEOPTIONSCLIP,
        !           546:                     fStretchClipboardData ?
        !           547:                     DID_PASTEOPTIONSSTRETCH : DID_PASTEOPTIONSCLIP);
        !           548: 
        !           549:             CenterWindow(hwnd);
        !           550: 
        !           551:             break;
        !           552: 
        !           553:         case WM_COMMAND:
        !           554:             switch (LOWORD(wParam)) {
        !           555:                 case IDOK :
        !           556:                     if (IsDlgButtonChecked(hwnd, DID_PASTEOPTIONSSTRETCH))
        !           557:                         fStretchClipboardData = TRUE;
        !           558:                     else
        !           559:                         fStretchClipboardData = FALSE;
        !           560: 
        !           561:                     EndDialog(hwnd, IDOK);
        !           562:                     break;
        !           563: 
        !           564:                 case IDCANCEL:
        !           565:                     EndDialog(hwnd, IDCANCEL);
        !           566:                     break;
        !           567: 
        !           568:                 case IDHELP:
        !           569:                     WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT,
        !           570:                             HELPID_PASTEOPTIONS);
        !           571:                     break;
        !           572:             }
        !           573: 
        !           574:             break;
        !           575: 
        !           576:         default:
        !           577:             return FALSE;
        !           578:     }
        !           579: 
        !           580:     return TRUE;
        !           581: }
        !           582: 
        !           583: 
        !           584: 
        !           585: /************************************************************************
        !           586: * PickSetRect
        !           587: *
        !           588: * Sets the globals for the picking rectangle size.  This affects
        !           589: * what is copied into the clipboard.
        !           590: *
        !           591: * Arguments:
        !           592: *
        !           593: * History:
        !           594: *
        !           595: ************************************************************************/
        !           596: 
        !           597: VOID PickSetRect(
        !           598:     INT xLeft,
        !           599:     INT yTop,
        !           600:     INT xRight,
        !           601:     INT yBottom)
        !           602: {
        !           603:     SetRect(&grcPick, xLeft, yTop, xRight, yBottom);
        !           604:     gcxPick = (grcPick.right - grcPick.left) + 1;
        !           605:     gcyPick = (grcPick.bottom - grcPick.top) + 1;
        !           606: }

unix.superglobalmegacorp.com

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