home *** CD-ROM | disk | FTP | other *** search
- /*
- * UIEFFECT.CPP
- *
- * Utility functions for drawing various graphical effects.
- *
- * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
- *
- * Kraig Brockschmidt, Microsoft
- * Internet : kraigb@microsoft.com
- * Compuserve: >INTERNET:kraigb@microsoft.com
- */
-
-
- #include "inoledll.h"
-
- //Hatch pattern brush bits
- static WORD g_wHatchBmp[]={0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88};
-
-
- /*
- * UIDrawHandles
- *
- * Purpose:
- * Draw handles or/and boundary around Container Object when selected
- *
- * Parameters:
- * pRect Dimensions of Container Object
- * hDC HDC of the site
- * dwFlags DWORD specifying how to draw the handles.
- * cSize UINT size of handle box
- * fDraw BOOL draw if TRUE, erase if FALSE
- *
- * Return Value:
- * None
- */
-
- STDAPI_(void) UIDrawHandles(LPRECT pRect, HDC hDC, DWORD dwFlags, UINT cSize
- , BOOL fDraw)
- {
- HBRUSH hBR;
- RECT rc;
- int bkmodeOld;
- BOOL fInvert=(BOOL)(dwFlags & UI_HANDLES_USEINVERSE);
-
- CopyRect((LPRECT)&rc, pRect);
-
- bkmodeOld=SetBkMode(hDC, TRANSPARENT);
-
- if (dwFlags & UI_HANDLES_OUTSIDE)
- InflateRect((LPRECT)&rc, cSize - 1, cSize - 1);
-
- //Draw the handles inside the rectangle boundary
- DrawHandle(hDC, rc.left, rc.top, cSize, fInvert, fDraw);
- DrawHandle(hDC, rc.left, rc.top+(rc.bottom-rc.top-cSize)/2, cSize, fInvert, fDraw);
- DrawHandle(hDC, rc.left, rc.bottom-cSize, cSize, fInvert, fDraw);
- DrawHandle(hDC, rc.left+(rc.right-rc.left-cSize)/2, rc.top, cSize, fInvert, fDraw);
- DrawHandle(hDC, rc.left+(rc.right-rc.left-cSize)/2, rc.bottom-cSize, cSize, fInvert, fDraw);
- DrawHandle(hDC, rc.right-cSize, rc.top, cSize, fInvert, fDraw);
- DrawHandle(hDC, rc.right-cSize, rc.top+(rc.bottom-rc.top-cSize)/2, cSize, fInvert, fDraw);
- DrawHandle(hDC, rc.right-cSize, rc.bottom-cSize, cSize, fInvert, fDraw);
-
- if (!(dwFlags & UI_HANDLES_NOBORDER))
- {
- if (fDraw)
- hBR=(HBRUSH)GetStockObject(BLACK_BRUSH);
- else
- hBR=(HBRUSH)GetStockObject(WHITE_BRUSH);
-
- FrameRect(hDC, pRect, hBR);
- }
-
- SetBkMode(hDC, bkmodeOld);
- }
-
-
-
- /*
- * DrawHandle
- *
- * Purpose:
- * Draw a handle box at the specified coordinate
- *
- * Parameters:
- * hDC HDC to be drawn into
- * x, y int upper left corner coordinate of the handle box
- * cSize UINT size of handle box
- * fInvert BOOL indicating to invert the rect or fill it
- * fDraw BOOL draw if TRUE, erase if FALSE,
- * ignored if fInvert is TRUE
- *
- * Return Value:
- * None
- */
-
- void DrawHandle(HDC hDC, int x, int y, UINT cSize, BOOL fInvert
- , BOOL fDraw)
- {
- HBRUSH hBR;
- HBRUSH hBROld;
- HPEN hPen;
- HPEN hPenOld;
- RECT rc;
-
- if (!fInvert)
- {
- if (fDraw)
- {
- hPen=(HPEN)GetStockObject(BLACK_PEN);
- hBR=(HBRUSH)GetStockObject(BLACK_BRUSH);
- }
- else
- {
- hPen=(HPEN)GetStockObject(WHITE_PEN);
- hBR=(HBRUSH)GetStockObject(WHITE_PEN);
- }
-
- hPenOld=(HPEN)SelectObject(hDC, hPen);
- hBROld=(HBRUSH)SelectObject(hDC, hBR);
- Rectangle(hDC, x, y, x+cSize, y+cSize);
- SelectObject(hDC, hPenOld);
- SelectObject(hDC, hBROld);
- }
- else
- {
- rc.left=x;
- rc.top=y;
- rc.right=x + cSize;
- rc.bottom=y + cSize;
- InvertRect(hDC, (LPRECT)&rc);
- }
-
- return;
- }
-
-
-
- /*
- * UIDrawShading
- *
- * Purpose:
- * Draw a hatching across a rectangle, inside a rectangle, or
- * outside a rectangle.
- *
- * Parameters:
- * prc LPRECT containing the rectangle.
- * hDC HDC on which to draw.
- * dwFlags DWORD specifying how to draw the shading.
- * cWidth UINT width of the border to draw. Ignored
- * if dwFlags has UI_SHADE_FULLRECT.
- *
- * Return Value:
- * None
- */
-
- STDAPI_(void) UIDrawShading(LPRECT prc, HDC hDC, DWORD dwFlags, UINT cWidth)
- {
- HBRUSH hBR;
- HBRUSH hBROld;
- HBITMAP hBM;
- RECT rc;
- UINT cx, cy;
- COLORREF crText;
- COLORREF crBk;
- const DWORD dwROP=0x00A000C9L; //DPa
-
- if (NULL==prc || NULL==hDC)
- return;
-
- hBM=CreateBitmap(8, 8, 1, 1, g_wHatchBmp);
- hBR=CreatePatternBrush(hBM);
- hBROld=(HBRUSH)SelectObject(hDC, hBR);
-
- rc=*prc;
- cx=rc.right-rc.left;
- cy=rc.bottom-rc.top;
-
- if (UI_SHADE_FULLRECT==dwFlags)
- {
- crText=SetTextColor(hDC, RGB(255, 255, 255));
- crBk=SetBkColor(hDC, RGB(0, 0, 0));
- PatBlt(hDC, rc.left, rc.top, cx, cy, dwROP);
- }
- else
- {
- if (UI_SHADE_BORDEROUT==dwFlags)
- InflateRect((LPRECT)&rc, cWidth-1, cWidth-1);
-
- crText=SetTextColor(hDC, RGB(255, 255, 255));
- crBk=SetBkColor(hDC, RGB(0, 0, 0));
- PatBlt(hDC, rc.left, rc.top, cx, cWidth, dwROP);
- PatBlt(hDC, rc.left, rc.top, cWidth, cy, dwROP);
- PatBlt(hDC, rc.right-cWidth, rc.top, cWidth, cy, dwROP);
- PatBlt(hDC, rc.left, rc.bottom-cWidth, cx, cWidth, dwROP);
- }
-
- SetTextColor(hDC, crText);
- SetBkColor(hDC, crBk);
- SelectObject(hDC, hBROld);
- DeleteObject(hBR);
- DeleteObject(hBM);
-
- return;
- }
-
-
-
-
- /*
- * UIShowObject
- *
- * Purpose:
- * Draw the ShowObject effect around an embedded or linked
- * object.
- *
- * Parameters:
- * prc LPRECT to draw around.
- * hDC HDC on which to draw.
- * fLink BOOL specifying a linked (TRUE) or
- * embedded (FALSE) object
- *
- * Return Value:
- * None
- */
-
- STDAPI_(void) UIShowObject(LPCRECT prc, HDC hDC, BOOL fLink)
- {
- HPEN hPen;
- HPEN hPenOld;
- HBRUSH hBROld;
-
- if (NULL==prc || NULL==hDC)
- return;
-
- hPen=fLink ? CreatePen(PS_DASH, 1, RGB(0,0,0))
- : (HPEN)GetStockObject(BLACK_PEN);
-
- if (!hPen)
- return;
-
- hPenOld=(HPEN)SelectObject(hDC, hPen);
- hBROld=(HBRUSH)SelectObject(hDC, GetStockObject(NULL_BRUSH));
-
- Rectangle(hDC, prc->left, prc->top, prc->right, prc->bottom);
-
- SelectObject(hDC, hPenOld);
- SelectObject(hDC, hBROld);
-
- if (fLink)
- DeleteObject(hPen);
-
- return;
- }
-