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

1.1       root        1: /*
                      2:  * ICONBOX.C
                      3:  *
                      4:  * Implemenatation of an IconBox control for OLE 2.0 UI dialogs that we'll
                      5:  * use wherever a dialog needs an icon/label display.  Through the control's
                      6:  * interface we can change the image or control label visibility.
                      7:  *
                      8:  * The IconBox discusses images in CF_METAFILEPICT format.  When drawing
                      9:  * such a metafile, the entire aspect is centered in the IconBox, so long
                     10:  * labels are chopped at either end.
                     11:  *
                     12:  * Copyright (c)1992 Microsoft Corporation, All Right Reserved
                     13:  */
                     14: 
                     15: 
                     16: #define STRICT  1
                     17: #include "ole2ui.h"
                     18: #include "iconbox.h"
                     19: 
                     20: 
                     21: //Flag indicating if we've registered the class
                     22: static BOOL     fRegistered=FALSE;
                     23: 
                     24: 
                     25: /*
                     26:  * FIconBoxInitialize
                     27:  *
                     28:  * Purpose:
                     29:  *  Registers the IconBox control class.
                     30:  *
                     31:  * Parameters:
                     32:  *  hInst           HINSTANCE instance of the DLL.
                     33:  *
                     34:  * Return Value:
                     35:  *  BOOL            TRUE if all initialization succeeded, FALSE otherwise.
                     36:  */
                     37: 
                     38: BOOL FIconBoxInitialize(HINSTANCE hInst)
                     39:     {
                     40:     WNDCLASS        wc;
                     41: 
                     42:     if (!fRegistered)
                     43:         {
                     44:         wc.lpfnWndProc   =IconBoxWndProc;
                     45:         wc.cbClsExtra    =0;
                     46:         wc.cbWndExtra    =CBICONBOXWNDEXTRA;
                     47:         wc.hInstance     =hInst;
                     48:         wc.hIcon         =NULL;
                     49:         wc.hCursor       =LoadCursor(NULL, IDC_ARROW);
                     50:         wc.hbrBackground =(HBRUSH)NULL;
                     51:         wc.lpszMenuName  =NULL;
                     52:         wc.lpszClassName =SZCLASSICONBOX;
                     53:         wc.style         =CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW;
                     54: 
                     55:         fRegistered=RegisterClass(&wc);
                     56:         }
                     57: 
                     58:     return fRegistered;
                     59:     }
                     60: 
                     61: 
                     62: 
                     63: 
                     64: 
                     65: /*
                     66:  * IconBoxUninitialize
                     67:  *
                     68:  * Purpose:
                     69:  *  Cleans up anything done in FIconBoxInitialize.  Currently there is
                     70:  *  nothing, but we do this for symmetry.
                     71:  *
                     72:  * Parameters:
                     73:  *  None
                     74:  *
                     75:  * Return Value:
                     76:  *  None
                     77:  */
                     78: 
                     79: void IconBoxUninitialize(void)
                     80:     {
                     81:     //Nothing to do.
                     82:     return;
                     83:     }
                     84: 
                     85: 
                     86: 
                     87: 
                     88: 
                     89: 
                     90: /*
                     91:  * IconBoxWndProc
                     92:  *
                     93:  * Purpose:
                     94:  *  Window Procedure for the IconBox custom control.  Only handles
                     95:  *  WM_CREATE, WM_PAINT, and private messages to manipulate the image.
                     96:  *
                     97:  * Parameters:
                     98:  *  Standard
                     99:  *
                    100:  * Return Value:
                    101:  *  Standard
                    102:  */
                    103: 
                    104: LONG CALLBACK EXPORT IconBoxWndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
                    105:     {
                    106:     HGLOBAL         hMF=NULL;
                    107:     PAINTSTRUCT     ps;
                    108:     HDC             hDC;
                    109:     RECT            rc;
                    110: 
                    111: 
                    112:     //Handle standard Windows messages.
                    113:     switch (iMsg)
                    114:         {
                    115:         case WM_CREATE:
                    116:             SetWindowWord(hWnd, IBWW_HIMAGE, 0);
                    117:             SetWindowWord(hWnd, IBWW_FLABEL, TRUE);
                    118:             return 0L;
                    119: 
                    120: 
                    121:         case WM_ERASEBKGND:
                    122:         {
                    123: 
                    124:            HBRUSH hBrush;
                    125:            RECT   Rect;
                    126: #if defined( WIN32 )
                    127:            POINT  point;
                    128: #endif
                    129: 
                    130:            GetClientRect(hWnd, &Rect);
                    131: #if defined( WIN32 )
                    132:            hBrush = (HBRUSH)SendMessage(GetParent(hWnd),
                    133:                                         WM_CTLCOLORDLG, 
                    134:                                         wParam, 
                    135:                                         (LPARAM)GetParent(hWnd));
                    136: #else 
                    137:            hBrush = (HBRUSH)SendMessage(GetParent(hWnd),
                    138:                                         WM_CTLCOLOR, 
                    139:                                         wParam, 
                    140:                                         MAKELPARAM(GetParent(hWnd), CTLCOLOR_DLG));
                    141: #endif
                    142: 
                    143: 
                    144:            if (!hBrush)
                    145:              return FALSE;
                    146: 
                    147:            UnrealizeObject(hBrush);
                    148: 
                    149: #if defined( WIN32 )
                    150:            SetBrushOrgEx((HDC)wParam, 0, 0, &point);
                    151: #else
                    152:            SetBrushOrg((HDC)wParam, 0, 0);
                    153: #endif
                    154: 
                    155:            FillRect((HDC)wParam, &Rect, hBrush);
                    156: 
                    157:            return TRUE;
                    158:         }
                    159: 
                    160: 
                    161:         case WM_PAINT:
                    162:             hMF=(HGLOBAL)GetWindowWord(hWnd, IBWW_HIMAGE);
                    163: 
                    164:             //BeginPaint and EndPaint clear us even if hMF is NULL.
                    165:             hDC=BeginPaint(hWnd, &ps);
                    166: 
                    167:             if (NULL!=hMF)
                    168:                 {
                    169:                 BOOL            fLabel;
                    170: 
                    171:                 //Now we get to paint the metafile, centered in our rect.
                    172:                 GetClientRect(hWnd, &rc);
                    173: 
                    174:                 /*
                    175:                  * If we're doing icon only, then place the metafile
                    176:                  * at the center of our box minus half the icon width.
                    177:                  * Top is top.
                    178:                  */
                    179: 
                    180:                 fLabel=GetWindowWord(hWnd, IBWW_FLABEL);
                    181: 
                    182: 
                    183:                 //Go draw where we decided to place it.
                    184:                 OleUIMetafilePictIconDraw(hDC, &rc, hMF, !fLabel);
                    185:                 }
                    186: 
                    187:             EndPaint(hWnd, &ps);
                    188:             break;
                    189: 
                    190: 
                    191:         case IBXM_IMAGESET:
                    192:             /*
                    193:              * wParam contains the new handle.
                    194:              * lParam is a flag to delete the old or not.
                    195:              */
                    196:             hMF=(HGLOBAL)SetWindowWord(hWnd, IBWW_HIMAGE, (WORD)wParam);
                    197:             InvalidateRect(hWnd, NULL, TRUE);
                    198:             UpdateWindow(hWnd);
                    199: 
                    200:             //Delete the old handle if requested
                    201:             if (0L!=lParam)
                    202:                 {
                    203:                 OleUIMetafilePictIconFree(hMF);
                    204:                 hMF=NULL;
                    205:                 }
                    206: 
                    207:             return (LONG)(UINT)hMF;
                    208: 
                    209: 
                    210:         case IBXM_IMAGEGET:
                    211:             //Return the current index.
                    212:             hMF=(HGLOBAL)GetWindowWord(hWnd, IBWW_HIMAGE);
                    213:             return (LONG)(UINT)hMF;
                    214: 
                    215: 
                    216:         case IBXM_IMAGEFREE:
                    217:             //Free up whatever we're holding.
                    218:             hMF=(HGLOBAL)GetWindowWord(hWnd, IBWW_HIMAGE);
                    219:             OleUIMetafilePictIconFree(hMF);
                    220:             return 1L;
                    221: 
                    222: 
                    223:         case IBXM_LABELENABLE:
                    224:             //wParam has the new flag, returns the previous flag.
                    225:             return (LONG)SetWindowWord(hWnd, IBWW_FLABEL, (WORD)wParam);
                    226: 
                    227: 
                    228:         default:
                    229:             return DefWindowProc(hWnd, iMsg, wParam, lParam);
                    230:         }
                    231: 
                    232:     return 0L;
                    233:     }
                    234: 
                    235: 
                    236: 
                    237: 
                    238: 
                    239: 
                    240: 
                    241:                                         

unix.superglobalmegacorp.com

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