Annotation of mstools/ole20/samples/ole2ui/objfdbk.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * OBJFDBK.C
                      3:  *
                      4:  * Miscellaneous API's to generate UI feedback effects for OLE objects. This
                      5:  * is part of the OLE 2.0 User Interface Support Library.
                      6:  * The following feedback effects are supported:
                      7:  *      1. Object selection handles (OleUIDrawHandles)
                      8:  *      2. Open Object window shading (OleUIDrawShading)
                      9:  *
                     10:  * Copyright (c)1992 Microsoft Corporation, All Right Reserved
                     11:  */
                     12: 
                     13: #define STRICT  1
                     14: #include "ole2ui.h"
                     15: 
                     16: static void DrawHandle(HDC hdc, int x, int y, UINT cSize, BOOL bInvert, BOOL fDraw);
                     17: 
                     18: /* 
                     19:  * OleUIDrawHandles
                     20:  *
                     21:  * Purpose:
                     22:  *  Draw handles or/and boundary around Container Object when selected
                     23:  *
                     24:  * Parameters:
                     25:  *  lpRect      Dimensions of Container Object
                     26:  *  hdc         HDC of Container Object (MM_TEXT mapping mode)
                     27:  *  dwFlags-    
                     28:  *      Exclusive flags
                     29:  *          OLEUI_HANDLES_INSIDE    Draw handles on inside of rect
                     30:  *          OLEUI_HANDLES_OUTSIDE   Draw handles on outside of rect
                     31:  *      Optional flags
                     32:  *          OLEUI_HANDLES_NOBORDER  Draw handles only, no rect
                     33:  *          OLEUI_HANDLES_USEINVERSE    
                     34:  *              use invert for handles and rect, o.t. use COLOR_WINDOWTEXT
                     35:  *  cSize       size of handle box 
                     36:  *  fDraw       Draw if TRUE, erase if FALSE
                     37:  *
                     38:  * Return Value: null
                     39:  * 
                     40:  */
                     41: STDAPI_(void) OleUIDrawHandles(
                     42:     LPRECT  lpRect, 
                     43:     HDC     hdc, 
                     44:     DWORD   dwFlags, 
                     45:     UINT    cSize, 
                     46:     BOOL    fDraw
                     47: )
                     48: {
                     49:     HBRUSH  hbr;
                     50:     RECT    rc;
                     51:     int     bkmodeOld;
                     52:     BOOL    bInvert = (BOOL) (dwFlags & OLEUI_HANDLES_USEINVERSE);
                     53:     
                     54:     CopyRect((LPRECT)&rc, lpRect);
                     55:     
                     56:     bkmodeOld = SetBkMode(hdc, TRANSPARENT);
                     57:  
                     58:     if (dwFlags & OLEUI_HANDLES_OUTSIDE)
                     59:         InflateRect((LPRECT)&rc, cSize - 1, cSize - 1);
                     60: 
                     61:     // Draw the handles inside the rectangle boundary
                     62:     DrawHandle(hdc, rc.left, rc.top, cSize, bInvert, fDraw);
                     63:     DrawHandle(hdc, rc.left, rc.top+(rc.bottom-rc.top-cSize)/2, cSize, bInvert, fDraw);
                     64:     DrawHandle(hdc, rc.left, rc.bottom-cSize, cSize, bInvert, fDraw);
                     65:     DrawHandle(hdc, rc.left+(rc.right-rc.left-cSize)/2, rc.top, cSize, bInvert, fDraw);
                     66:     DrawHandle(hdc, rc.left+(rc.right-rc.left-cSize)/2, rc.bottom-cSize, cSize, bInvert, fDraw);
                     67:     DrawHandle(hdc, rc.right-cSize, rc.top, cSize, bInvert, fDraw);
                     68:     DrawHandle(hdc, rc.right-cSize, rc.top+(rc.bottom-rc.top-cSize)/2, cSize, bInvert, fDraw);
                     69:     DrawHandle(hdc, rc.right-cSize, rc.bottom-cSize, cSize, bInvert, fDraw);
                     70: 
                     71:     if (!(dwFlags & OLEUI_HANDLES_NOBORDER)) {
                     72:         if (fDraw)
                     73:             hbr = GetStockObject(BLACK_BRUSH);
                     74:         else
                     75:             hbr = GetStockObject(WHITE_BRUSH);
                     76: 
                     77:         FrameRect(hdc, lpRect, hbr);
                     78:     }
                     79: 
                     80:     SetBkMode(hdc, bkmodeOld);
                     81: }
                     82:     
                     83: 
                     84:     
                     85: /* 
                     86:  * DrawHandle
                     87:  *
                     88:  * Purpose:
                     89:  *  Draw a handle box at the specified coordinate
                     90:  *
                     91:  * Parameters:
                     92:  *  hdc         HDC to be drawn into
                     93:  *  x, y        upper left corner coordinate of the handle box
                     94:  *  cSize       size of handle box 
                     95:  *  bInvert     use InvertRect() if TRUE, otherwise use Rectangle()
                     96:  *  fDraw       Draw if TRUE, erase if FALSE, ignored if bInvert is TRUE
                     97:  *
                     98:  * Return Value: null
                     99:  * 
                    100:  */
                    101: static void DrawHandle(HDC hdc, int x, int y, UINT cSize, BOOL bInvert, BOOL fDraw)
                    102: {
                    103:     HBRUSH  hbr;
                    104:     HBRUSH  hbrOld;
                    105:     HPEN    hpen;
                    106:     HPEN    hpenOld;
                    107:     RECT    rc;
                    108: 
                    109:     
                    110:     if (!bInvert) {
                    111:         if (fDraw) {
                    112:             hpen = GetStockObject(BLACK_PEN);
                    113:             hbr = GetStockObject(BLACK_BRUSH);
                    114:         } else {
                    115:             hpen = GetStockObject(WHITE_PEN);
                    116:             hbr = GetStockObject(WHITE_PEN);
                    117:         }
                    118: 
                    119:         hpenOld = SelectObject(hdc, hpen);
                    120:         hbrOld = SelectObject(hdc, hbr);
                    121:         Rectangle(hdc, x, y, x+cSize, y+cSize);
                    122:         SelectObject(hdc, hpenOld);
                    123:         SelectObject(hdc, hbrOld);
                    124:     } 
                    125:     else {
                    126:         rc.left = x;
                    127:         rc.top = y;
                    128:         rc.right = x + cSize;
                    129:         rc.bottom = y + cSize;
                    130:         InvertRect(hdc, (LPRECT)&rc);
                    131:     }
                    132: }  
                    133: 
                    134: 
                    135: /* 
                    136:  * OleUIDrawShading
                    137:  *
                    138:  * Purpose:
                    139:  *  Shade the object when it is in in-place editing. Borders are drawn
                    140:  *  on the Object rectangle. The right and bottom edge of the rectangle
                    141:  *  are excluded in the drawing.
                    142:  *
                    143:  * Parameters:
                    144:  *  lpRect      Dimensions of Container Object
                    145:  *  hdc         HDC for drawing
                    146:  *  dwFlags-    
                    147:  *      Exclusive flags
                    148:  *          OLEUI_SHADE_FULLRECT    Shade the whole rectangle 
                    149:  *          OLEUI_SHADE_BORDERIN    Shade cWidth pixels inside rect
                    150:  *          OLEUI_SHADE_BORDEROUT   Shade cWidth pixels outside rect
                    151:  *      Optional flags
                    152:  *          OLEUI_SHADE_USEINVERSE
                    153:  *              use PATINVERT instead of the hex value
                    154:  *  cWidth      width of border in pixel
                    155:  *
                    156:  * Return Value: null
                    157:  * 
                    158:  */
                    159: STDAPI_(void) OleUIDrawShading(LPRECT lpRect, HDC hdc, DWORD dwFlags, UINT cWidth)
                    160: {
                    161:     HBRUSH  hbr;
                    162:     HBRUSH  hbrOld;
                    163:     HBITMAP hbm;
                    164:     RECT    rc;
                    165:     WORD    wHatchBmp[] = {0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88};
                    166:     COLORREF cvText;
                    167:     COLORREF cvBk;
                    168:     
                    169:     hbm = CreateBitmap(8, 8, 1, 1, wHatchBmp);
                    170:     hbr = CreatePatternBrush(hbm);
                    171:     hbrOld = SelectObject(hdc, hbr);
                    172:         
                    173:     rc = *lpRect;
                    174:     
                    175:     if (dwFlags == OLEUI_SHADE_FULLRECT) {
                    176:         cvText = SetTextColor(hdc, RGB(255, 255, 255));
                    177:         cvBk = SetBkColor(hdc, RGB(0, 0, 0));
                    178:         PatBlt(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, 
                    179:             0x00A000C9L /* DPa */ );
                    180:             
                    181:     } else {    // either inside or outside rect
                    182:         
                    183:         if (dwFlags == OLEUI_SHADE_BORDEROUT)
                    184:             InflateRect((LPRECT)&rc, cWidth - 1, cWidth - 1);
                    185:         
                    186:         cvText = SetTextColor(hdc, RGB(255, 255, 255));
                    187:         cvBk = SetBkColor(hdc, RGB(0, 0, 0));
                    188:         PatBlt(hdc, rc.left, rc.top, rc.right - rc.left, 
                    189:             cWidth, 0x00A000C9L /* DPa */);
                    190:         PatBlt(hdc, rc.left, rc.top, cWidth, rc.bottom - rc.top, 
                    191:             0x00A000C9L /* DPa */);
                    192:         PatBlt(hdc, rc.right - cWidth, rc.top, cWidth, 
                    193:             rc.bottom - rc.top, 0x00A000C9L /* DPa */);
                    194:         PatBlt(hdc, rc.left, rc.bottom - cWidth, rc.right-rc.left, 
                    195:             cWidth, 0x00A000C9L /* DPa */);
                    196:     }
                    197:             
                    198:     SetTextColor(hdc, cvText);
                    199:     SetBkColor(hdc, cvBk);
                    200:     SelectObject(hdc, hbrOld);
                    201:     DeleteObject(hbr);
                    202:     DeleteObject(hbm);
                    203: }
                    204: 
                    205: 
                    206: /* 
                    207:  * OleUIShowObject
                    208:  *
                    209:  * Purpose:
                    210:  *  Draw the ShowObject effect around the object
                    211:  *
                    212:  * Parameters:
                    213:  *  lprc        rectangle for drawing
                    214:  *  hdc         HDC for drawing
                    215:  *  fIsLink     linked object (TRUE) or embedding object (FALSE)
                    216:  *
                    217:  * Return Value: null
                    218:  * 
                    219:  */
                    220: STDAPI_(void) OleUIShowObject(LPCRECT lprc, HDC hdc, BOOL fIsLink)
                    221: {
                    222:     HPEN    hpen;
                    223:     HPEN    hpenOld;
                    224:     HBRUSH  hbrOld;
                    225:     
                    226:     if (!lprc || !hdc)
                    227:         return;
                    228: 
                    229:     hpen = fIsLink ? CreatePen(PS_DASH, 1, RGB(0,0,0)) :
                    230:                      GetStockObject(BLACK_PEN);
                    231: 
                    232:     if (!hpen) 
                    233:         return;
                    234: 
                    235:     hpenOld = SelectObject(hdc, hpen);
                    236:     hbrOld = SelectObject(hdc, GetStockObject(NULL_BRUSH));
                    237:     
                    238:     Rectangle(hdc, lprc->left, lprc->top, lprc->right, lprc->bottom);
                    239:     
                    240:     SelectObject(hdc, hpenOld);
                    241:     SelectObject(hdc, hbrOld);
                    242:     
                    243:     if (fIsLink)
                    244:         DeleteObject(hpen);
                    245: 
                    246: }

unix.superglobalmegacorp.com

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