Annotation of mstools/samples/fontview/tools.c, revision 1.1

1.1     ! root        1: #include "FirstAid.H"
        !             2: 
        !             3: #define NOMINMAX
        !             4: #include <windows.h>
        !             5: 
        !             6: #include <stdlib.h> // For 'abs'
        !             7: 
        !             8: //typedef LONG (APIENTRY *WNDPROC)(HWND, UINT, DWORD, LONG);
        !             9: 
        !            10: HWND    hwndTools, hwndToolText, hwndToolCombo, hwndToolButton, hwndMain;
        !            11: HFONT   hfontTools=0;
        !            12: TEXTMETRIC tmToolFont;
        !            13: INT     dyTools = 0, cxToolBorder, cyToolBorder, cntToolCtrls = 0, dyCombo;
        !            14: INT     xCurrent = 10; 
        !            15: INT     dxTools= 0;
        !            16: HBRUSH  hbrBtnFace=0, hbrWindow=0;
        !            17: HANDLE  hInst=0;
        !            18: 
        !            19: #define MAXCTRLS 25
        !            20: #define TC_SPACE 0
        !            21: #define TC_LABEL 1
        !            22: #define TC_COMBO 2
        !            23: #define TC_BUTTON 3
        !            24: typedef struct _tagTools {
        !            25:                        HWND    hwnd;
        !            26:                        WORD    wType;
        !            27:                        INT     iWidth, iHeight;
        !            28:                        HICON   hIcon;
        !            29:                } Tools;
        !            30: Tools  toolCtrl[MAXCTRLS];
        !            31: 
        !            32: LONG APIENTRY ToolsProc       (HWND, UINT, UINT, LONG);
        !            33: LONG APIENTRY MyComboProc     (HWND, UINT, UINT, LONG);
        !            34: VOID APIENTRY UpdatePositions (HWND hwnd);
        !            35: 
        !            36: BOOL InitToolBar (HANDLE hInstance)
        !            37: {
        !            38:        WNDCLASS    wndclass;
        !            39: 
        !            40:        hbrBtnFace = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
        !            41:        hbrWindow = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
        !            42: 
        !            43:        wndclass.style         = CS_HREDRAW | CS_VREDRAW;
        !            44:        wndclass.lpfnWndProc   = (WNDPROC)ToolsProc;
        !            45:        wndclass.cbClsExtra    = 0;
        !            46:        wndclass.cbWndExtra    = 0;
        !            47:        wndclass.hInstance      = hInstance;
        !            48:        wndclass.hIcon     = NULL;
        !            49:        wndclass.hbrBackground = hbrBtnFace;
        !            50:        wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
        !            51:        wndclass.lpszMenuName  = NULL;
        !            52:        wndclass.lpszClassName = "SamplerTools";
        !            53: 
        !            54:        if (!RegisterClass (&wndclass))
        !            55:                return FALSE;
        !            56: }
        !            57: 
        !            58: BOOL CreateToolBar (HWND hwnd, HANDLE hInstance, INT iId)
        !            59: {
        !            60:        HWND hwndTmp;
        !            61:        RECT rect;
        !            62: 
        !            63: //OutputDebugString (__FILE__": [CreateToolBar]\n");
        !            64: 
        !            65: #if defined (NT)
        !            66:        hInst = (HANDLE)GetWindowLong (hwnd, GWL_HINSTANCE);
        !            67: #elif defined (WIN16)
        !            68:        hInst = GetWindowWord (hwnd, GWW_HINSTANCE);
        !            69: #endif
        !            70: 
        !            71:        if (hbrBtnFace==0) {
        !            72:                hbrBtnFace = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
        !            73:        }
        !            74:        if (hbrWindow==0) {
        !            75:                hbrWindow = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
        !            76:        }
        !            77: 
        !            78: 
        !            79:        cxToolBorder = GetSystemMetrics (SM_CXBORDER);
        !            80:        cyToolBorder = GetSystemMetrics (SM_CYBORDER);
        !            81: 
        !            82: //OutputDebugString (__FILE__": Calling CreateWindow\n");
        !            83: 
        !            84:        hwndTools = CreateWindow ("SamplerTools", "SamplerTools",
        !            85:                WS_CHILD | WS_CLIPSIBLINGS | WS_BORDER | WS_VISIBLE,
        !            86:                0, 0, 0, 0,
        !            87:        hwnd, (HMENU)iId, hInst, NULL);
        !            88:        if (!hwndTools) {
        !            89:                OutputDebugString (__FILE__": CreateWindow Failed\n");
        !            90:                return FALSE;
        !            91:        }
        !            92: //OutputDebugString (__FILE__": CreateWindow suceeded\n");
        !            93: 
        !            94:        /* Lets find out how big a combo box is... */
        !            95:        hwndTmp = CreateWindow ("COMBOBOX", "Combo",
        !            96:                WS_CHILD //| WS_CLIPSIBLINGS
        !            97:                | WS_VISIBLE | CBS_DROPDOWNLIST,
        !            98:                        0, 0, 0, 0,
        !            99:                hwndTools, NULL, hInst, NULL);
        !           100:        if (hwndTmp) {
        !           101:                SendMessage (hwndTmp, WM_SETFONT, (UINT)hfontTools, MAKELONG (TRUE, 0));
        !           102:                GetClientRect (hwndTmp, &rect);
        !           103:                dyCombo = rect.bottom - rect.top;
        !           104:                DestroyWindow (hwndTmp);
        !           105:        } else {
        !           106:                dyCombo = 30; // Just for a default value
        !           107:        }
        !           108: 
        !           109:        hwndMain = hwnd; // So we can pass WM_CONTROL messages back to the master parent
        !           110: 
        !           111:        hInstance; // unreferenced
        !           112: 
        !           113:        return TRUE;
        !           114: }
        !           115: 
        !           116: int ToolBarHeight (HWND hwnd)
        !           117: {
        !           118:        RECT rect;
        !           119:        
        !           120:        GetClientRect (hwndTools, &rect);
        !           121:        return rect.bottom-rect.top;
        !           122: 
        !           123:        hwnd; //unreferenced
        !           124: }
        !           125: 
        !           126: BOOL AdjustToolBar (HWND hwnd)
        !           127: {
        !           128:        RECT rect;
        !           129: 
        !           130:        GetClientRect (hwnd, &rect);
        !           131: 
        !           132:        MoveWindow (hwndTools,
        !           133:                rect.left-cxToolBorder,
        !           134:                rect.top - cyToolBorder,
        !           135:                rect.right - rect.left + (cxToolBorder*2),
        !           136:                dyTools,
        !           137:                TRUE);
        !           138:        return TRUE;
        !           139: }
        !           140: 
        !           141: void UpdatePositions (HWND hwnd)
        !           142: {
        !           143:        INT i, x, y, dx, dy, cnt;
        !           144: 
        !           145:        x = 10;
        !           146:        for (i=0; i<cntToolCtrls; i++) {
        !           147:                switch (toolCtrl[i].wType) {
        !           148:                        case TC_SPACE:
        !           149:                                dx = toolCtrl[i].iWidth;
        !           150:                                break;
        !           151:                        case TC_LABEL:
        !           152:                                dy = toolCtrl[i].iHeight;
        !           153:                                y = (dyTools/2) - (dy/2) - 1;
        !           154:                                dx = toolCtrl[i].iWidth;
        !           155:                                break;
        !           156:                        case TC_COMBO:
        !           157:                                dy = toolCtrl[i].iHeight;
        !           158:                                y = (dyTools/2) - (dy/2) - 1;
        !           159:                                dx = toolCtrl[i].iWidth;
        !           160:                                cnt = (INT)SendMessage (toolCtrl[i].hwnd, CB_GETCOUNT, (UINT)0, (LONG)0);
        !           161:                                if (cnt > 5) cnt = 5;
        !           162:                                dy = dy * cnt;
        !           163:                                break;
        !           164:                        case TC_BUTTON:
        !           165:                                dy = toolCtrl[i].iHeight;
        !           166:                                y = (dyTools/2) - (dy/2) - 1;
        !           167:                                dx = toolCtrl[i].iWidth;
        !           168:                                break;
        !           169:                        default:
        !           170:                                dy = toolCtrl[i].iHeight;
        !           171:                                y = (dyTools/2) - (dy/2) - 1;
        !           172:                                dx = toolCtrl[i].iWidth;
        !           173:                                break;
        !           174:                }
        !           175:                if (toolCtrl[i].wType != TC_SPACE) {
        !           176:                        MoveWindow (toolCtrl[i].hwnd, x, y, dx, dy, FALSE);
        !           177:                }
        !           178:                x += dx;
        !           179:        }
        !           180: 
        !           181: 
        !           182:    if(hwnd == NULL ){                          /* JAP mod, can be called from WM_SIZE */
        !           183:                UpdateWindow(hwndTools);        /* and hwndTools, isnt initialized yet*/
        !           184:        }
        !           185:        else{   
        !           186:                UpdateWindow (hwnd);
        !           187:        }
        !           188: }
        !           189: 
        !           190: BOOL AddToolSpace (INT iWidth, INT iHeight)
        !           191: {
        !           192:        if (cntToolCtrls >= MAXCTRLS) return FALSE;
        !           193:        toolCtrl[cntToolCtrls].hwnd = 0;
        !           194:        toolCtrl[cntToolCtrls].wType = TC_SPACE;
        !           195:        toolCtrl[cntToolCtrls].iWidth = iWidth;
        !           196:        toolCtrl[cntToolCtrls].iHeight = iHeight;
        !           197:        if ((toolCtrl[cntToolCtrls].iHeight + (6*cyToolBorder)) > dyTools) {
        !           198:                dyTools = (toolCtrl[cntToolCtrls].iHeight + (6*cyToolBorder));
        !           199:        }
        !           200:        UpdatePositions(NULL);    /* JAP HACK */
        !           201:        cntToolCtrls++;
        !           202:        return TRUE;
        !           203: }
        !           204: 
        !           205: HWND AddToolLabel (HANDLE hInst, INT iId, LPSTR szLabel, INT iWidth, DWORD dwStyle)
        !           206: {
        !           207:        HDC hdc;
        !           208: 
        !           209:        if (cntToolCtrls >= MAXCTRLS) return (HWND)0; // No room left in our fixed array
        !           210: 
        !           211:        toolCtrl[cntToolCtrls].hwnd = CreateWindow ("STATIC", szLabel,
        !           212:        WS_CHILD //| WS_CLIPSIBLINGS
        !           213:        | WS_VISIBLE | dwStyle,
        !           214:                0, 0, 0, 0,
        !           215:        hwndTools, (HMENU)iId, hInst, NULL);
        !           216: 
        !           217:        if (!toolCtrl[cntToolCtrls].hwnd) return (HWND)0; // CreateWindow failed for some reason
        !           218: 
        !           219:        SendMessage (toolCtrl[cntToolCtrls].hwnd, WM_SETFONT, (UINT)hfontTools, MAKELONG (TRUE, 0));
        !           220:        toolCtrl[cntToolCtrls].wType = TC_LABEL;
        !           221: 
        !           222:        hdc = GetDC (hwndTools);
        !           223:        if (iWidth < 0) {
        !           224:                toolCtrl[cntToolCtrls].iWidth = tmToolFont.tmAveCharWidth * abs(iWidth);
        !           225:        } else if (iWidth == 0) {
        !           226: #ifdef NT
        !           227:                SIZE size;
        !           228:                GetTextExtentPoint (hdc, szLabel, lstrlen(szLabel), &size);
        !           229:                toolCtrl[cntToolCtrls].iWidth = size.cx;
        !           230: #else
        !           231:                toolCtrl[cntToolCtrls].iWidth = LOWORD(GetTextExtent (hdc, szLabel, lstrlen(szLabel)));
        !           232: #endif
        !           233:        } else {
        !           234:                toolCtrl[cntToolCtrls].iWidth = iWidth;
        !           235:        }
        !           236:        toolCtrl[cntToolCtrls].iHeight = tmToolFont.tmHeight;
        !           237: 
        !           238:        if ((toolCtrl[cntToolCtrls].iHeight + (6*cyToolBorder)) > dyTools) {
        !           239:                dyTools = (toolCtrl[cntToolCtrls].iHeight + (6*cyToolBorder));
        !           240:        }
        !           241: 
        !           242:        ReleaseDC (hwndTools, hdc);
        !           243:        UpdatePositions(NULL);   /* JAP HACK*/
        !           244:        return toolCtrl[cntToolCtrls++].hwnd;
        !           245: }
        !           246: 
        !           247: HWND AddToolCombo (HANDLE hInst, INT iId, INT iWidth, DWORD dwStyle)
        !           248: {
        !           249: 
        !           250:        if (cntToolCtrls >= MAXCTRLS) return (HWND)0; // No room left in our fixed array
        !           251: 
        !           252:        if (dwStyle==0) dwStyle = CBS_DROPDOWNLIST;
        !           253:        toolCtrl[cntToolCtrls].hwnd = CreateWindow ("COMBOBOX", "",
        !           254:        WS_CHILD //| WS_CLIPSIBLINGS
        !           255:                | WS_VISIBLE | dwStyle,
        !           256:                0, 0, 0, 0,
        !           257:                hwndTools, (HMENU)iId, hInst, NULL);
        !           258: 
        !           259:        if (!toolCtrl[cntToolCtrls].hwnd) return (HWND)0; // CreateWindow failed for some reason
        !           260: 
        !           261:        SendMessage (toolCtrl[cntToolCtrls].hwnd, WM_SETFONT, (UINT)hfontTools, MAKELONG (TRUE, 0));
        !           262:        toolCtrl[cntToolCtrls].wType = TC_COMBO;
        !           263: 
        !           264:        if (iWidth < 0) {
        !           265:                toolCtrl[cntToolCtrls].iWidth = tmToolFont.tmAveCharWidth * abs(iWidth);
        !           266:        } else if (iWidth == 0) {
        !           267:                toolCtrl[cntToolCtrls].iWidth = tmToolFont.tmAveCharWidth * 15; // just a default width
        !           268:        } else {
        !           269:                toolCtrl[cntToolCtrls].iWidth = iWidth;
        !           270:        }
        !           271:        toolCtrl[cntToolCtrls].iHeight = dyCombo;
        !           272: 
        !           273:        if ((toolCtrl[cntToolCtrls].iHeight + (6*cyToolBorder)) > dyTools) {
        !           274:                dyTools = (toolCtrl[cntToolCtrls].iHeight + (6*cyToolBorder));
        !           275:        }
        !           276: 
        !           277:        UpdatePositions(NULL);
        !           278:        return toolCtrl[cntToolCtrls++].hwnd;
        !           279: }
        !           280: 
        !           281: 
        !           282: HWND AddToolButton (HANDLE hInst, INT iId, LPSTR szLabel, INT iWidth, INT iHeight, DWORD dwStyle)
        !           283: {
        !           284:        HDC hdc;
        !           285: 
        !           286:        if (cntToolCtrls >= MAXCTRLS) return (HWND)0; // No room left in our fixed array
        !           287: 
        !           288:        if (dwStyle == 0) dwStyle = BS_PUSHBUTTON;
        !           289:        toolCtrl[cntToolCtrls].hwnd = CreateWindow ("BUTTON", szLabel,
        !           290:        WS_CHILD //| WS_CLIPSIBLINGS
        !           291:                | WS_VISIBLE | dwStyle,
        !           292:                0, 0, 0, 0,
        !           293:        hwndTools, (HMENU)iId, hInst, NULL);
        !           294: 
        !           295:        if (!toolCtrl[cntToolCtrls].hwnd) return (HWND)0; // CreateWindow failed for some reason
        !           296: 
        !           297:        SendMessage (toolCtrl[cntToolCtrls].hwnd, WM_SETFONT, (UINT)hfontTools, MAKELONG (TRUE, 0));
        !           298:        toolCtrl[cntToolCtrls].wType = TC_BUTTON;
        !           299: 
        !           300:        hdc = GetDC (hwndTools);
        !           301:        SelectObject (hdc, hfontTools);
        !           302:        if (iWidth < 0) {
        !           303:                toolCtrl[cntToolCtrls].iWidth = tmToolFont.tmAveCharWidth * abs(iWidth);
        !           304:                toolCtrl[cntToolCtrls].iWidth += (6*cxToolBorder);
        !           305:        } else if (iWidth == 0) {
        !           306: #if defined (NT)
        !           307:                SIZE size;
        !           308:                GetTextExtentPoint (hdc, szLabel, lstrlen(szLabel), &size);
        !           309:                toolCtrl[cntToolCtrls].iWidth = size.cx;
        !           310: #elif defined (WIN16)
        !           311:                toolCtrl[cntToolCtrls].iWidth = LOWORD(GetTextExtent (hdc, szLabel, lstrlen(szLabel)));
        !           312: #endif
        !           313:                toolCtrl[cntToolCtrls].iWidth += (6*cxToolBorder);
        !           314:        } else {
        !           315:                toolCtrl[cntToolCtrls].iWidth = iWidth;
        !           316:        }
        !           317:        if (iHeight < 0) {
        !           318:                toolCtrl[cntToolCtrls].iHeight = tmToolFont.tmHeight;
        !           319:                toolCtrl[cntToolCtrls].iHeight += (6*cyToolBorder);
        !           320:        } else if (iHeight==0) {
        !           321:                toolCtrl[cntToolCtrls].iHeight = dyTools - (6*cyToolBorder);
        !           322:        } else {
        !           323:                toolCtrl[cntToolCtrls].iHeight = iHeight;
        !           324:        }
        !           325: 
        !           326:        if ((toolCtrl[cntToolCtrls].iHeight + (6*cyToolBorder)) > dyTools) {
        !           327:                dyTools = (toolCtrl[cntToolCtrls].iHeight + (6*cyToolBorder));
        !           328:        }
        !           329: 
        !           330:        if (dwStyle & BS_OWNERDRAW) {
        !           331:                toolCtrl[cntToolCtrls].hIcon = LoadIcon (hInst, szLabel);
        !           332:        } else {
        !           333:                toolCtrl[cntToolCtrls].hIcon = NULL;
        !           334:        }
        !           335: 
        !           336:        ReleaseDC (hwndTools, hdc);
        !           337:        UpdatePositions(NULL);
        !           338:        return toolCtrl[cntToolCtrls++].hwnd;
        !           339: }
        !           340: 
        !           341: 
        !           342: BOOL DestroyToolBar (void)
        !           343: {
        !           344:        return DeleteObject (hbrBtnFace);
        !           345: }
        !           346: 
        !           347: void DrawButton (HDC hdc, RECT rect, BOOL bDown, HICON hIcon)
        !           348: {
        !           349:        HBRUSH  hBrush, hbrFrame, hbrFace, hbrHilite, hbrShadow;
        !           350:        RECT    border;
        !           351:        INT     i;
        !           352: 
        !           353:        hbrFrame = CreateSolidBrush(GetSysColor(COLOR_WINDOWFRAME));
        !           354:        hbrFace = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
        !           355:        hbrHilite = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
        !           356:        hbrShadow = CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW));
        !           357: 
        !           358:        FillRect (hdc, &rect, hbrFace);
        !           359: 
        !           360:        if (hIcon) {
        !           361:                if (bDown) {
        !           362:                        DrawIcon (hdc, rect.left + (4*cyToolBorder), rect.top + (4*cyToolBorder), hIcon);
        !           363:                } else {
        !           364:                        DrawIcon (hdc, rect.left + (3*cyToolBorder), rect.top + (3*cyToolBorder), hIcon);
        !           365:                }
        !           366:        }
        !           367: 
        !           368:        hBrush = hbrFrame;
        !           369:        border = rect; border.bottom = border.top + cyToolBorder;
        !           370:        FillRect (hdc, &border, hBrush);
        !           371:        border = rect; border.right = border.left + cxToolBorder;
        !           372:        FillRect (hdc, &border, hBrush);
        !           373:        border = rect; border.top = border.bottom - cyToolBorder;
        !           374:        FillRect (hdc, &border, hBrush);
        !           375:        border = rect; border.left = border.right - cxToolBorder;
        !           376:        FillRect (hdc, &border, hBrush);
        !           377: 
        !           378:        for (i= 0; i<2; i++) {
        !           379:                InflateRect (&rect, -cxToolBorder, -cyToolBorder);
        !           380:                hBrush = (bDown?hbrShadow:hbrHilite);
        !           381:                border = rect; border.bottom = border.top + cyToolBorder;
        !           382:                FillRect (hdc, &border, hBrush);
        !           383:                border = rect; border.right = border.left + cxToolBorder;
        !           384:                FillRect (hdc, &border, hBrush);
        !           385:                if (!bDown) {
        !           386:                        hBrush = hbrShadow;
        !           387:                        border = rect; border.top = border.bottom - cyToolBorder;
        !           388:                        FillRect (hdc, &border, hBrush);
        !           389:                        border = rect; border.left = border.right - cxToolBorder;
        !           390:                        FillRect (hdc, &border, hBrush);
        !           391:                }
        !           392:        }
        !           393: 
        !           394:        DeleteObject (hbrFrame);
        !           395:        DeleteObject (hbrFace);
        !           396:        DeleteObject (hbrHilite);
        !           397:        DeleteObject (hbrShadow);
        !           398: 
        !           399: }
        !           400: 
        !           401: 
        !           402: LONG APIENTRY ToolsProc (HWND hwnd, UINT msg, UINT wParam, LONG lParam)
        !           403: {
        !           404:        HDC          hdc;
        !           405:        PAINTSTRUCT      ps;
        !           406:        INT          iType, idCtrl, msgCtrl, i;
        !           407:        RECT         rect, border;
        !           408:        COLORREF         clrColor;
        !           409:        HWND         hwndCtl;
        !           410:        LONG         lStyle;
        !           411:        HBRUSH       hBrush;
        !           412:        LPDRAWITEMSTRUCT lpdi;
        !           413:        HICON        hIcon;
        !           414: 
        !           415:        switch (msg) {
        !           416:        case WM_CREATE:
        !           417: //OutputDebugString (__FILE__": [ToolsProc] WM_CREATE\n");
        !           418: 
        !           419: #ifdef NOCREATEFONT // CreateFont is failing in NT
        !           420:                hfontTools = (HFONT)NULL;
        !           421: #else
        !           422:                hfontTools = CreateFont(16, 0, 0, 0, 0, 0, 0, 0,
        !           423:                                ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
        !           424:                                DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, NULL);
        !           425:                if (!hfontTools) {
        !           426:                                MessageBox (GetFocus(), "Failed To Create Font", "StatusProc", MB_OK);
        !           427:                        }
        !           428: #endif
        !           429:                hdc = GetDC (hwnd);
        !           430:                SelectObject (hdc, hfontTools);
        !           431:                        GetTextMetrics (hdc, &tmToolFont);
        !           432:                ReleaseDC (hwnd, hdc);
        !           433: 
        !           434: //OutputDebugString (__FILE__": [ToolsProc] WM_CREATE (exit)\n");
        !           435: 
        !           436:                        return DefWindowProc (hwnd, msg, wParam, lParam);
        !           437: 
        !           438:                case WM_SIZE:
        !           439:                        UpdatePositions(hwnd);
        !           440:                        break;
        !           441: 
        !           442: #if defined (NT)
        !           443:                case WM_CTLCOLORLISTBOX:
        !           444:                case WM_CTLCOLOREDIT:
        !           445:                case WM_CTLCOLORSTATIC:
        !           446:                case WM_CTLCOLORBTN:
        !           447:                case WM_CTLCOLORDLG:
        !           448:                case WM_CTLCOLORMSGBOX:
        !           449:                case WM_CTLCOLORSCROLLBAR:
        !           450:                        iType   = msg - WM_CTLCOLORMSGBOX;
        !           451:                        hdc     = (HDC)wParam;
        !           452:                        hwndCtl = (HWND)lParam;
        !           453: #elif defined (WIN16)
        !           454:                case WM_CTLCOLOR:
        !           455:                        hdc = wParam;
        !           456:                        hwndCtl = LOWORD(lParam);
        !           457:                        iType = HIWORD (lParam);
        !           458: #endif
        !           459:                        switch (iType) {
        !           460:                                case CTLCOLOR_EDIT: //Edit control
        !           461:                                        clrColor = GetSysColor (COLOR_BTNFACE);
        !           462:                                        hBrush = hbrWindow;
        !           463:                                        break;
        !           464: 
        !           465:                                case CTLCOLOR_LISTBOX: //List-box control
        !           466:                                        lStyle = GetWindowLong (hwndCtl, GWL_STYLE);
        !           467:                                        if (lStyle & CBS_SIMPLE) {
        !           468:                                                clrColor = GetSysColor (COLOR_WINDOW);
        !           469:                                                hBrush = hbrWindow;
        !           470:                                        } else {
        !           471:                                                clrColor = GetSysColor (COLOR_BTNFACE);
        !           472:                                                hBrush = hbrBtnFace;
        !           473:                                        }
        !           474:                                        break;
        !           475: 
        !           476:                                case CTLCOLOR_STATIC:
        !           477:                                        clrColor = GetSysColor (COLOR_BTNFACE);
        !           478:                                        hBrush = hbrBtnFace;
        !           479:                                        break;
        !           480: 
        !           481:                                case CTLCOLOR_BTN:
        !           482:                                        clrColor = GetSysColor (COLOR_BTNFACE);
        !           483:                                        hBrush = hbrBtnFace;
        !           484:                                        break;
        !           485: 
        !           486:                                case CTLCOLOR_SCROLLBAR:
        !           487:                                case CTLCOLOR_DLG:
        !           488:                                case CTLCOLOR_MSGBOX:
        !           489:                                default:
        !           490:                                        return NULL;
        !           491:                        }
        !           492:                        SetBkColor(hdc, clrColor);
        !           493:                return (LONG)hBrush;
        !           494: 
        !           495:                case WM_PAINT:
        !           496:                        hdc = BeginPaint (hwnd, &ps);
        !           497:                        GetClientRect (hwnd, &rect);
        !           498: 
        !           499:                        /* Shade the top of the bar white */
        !           500:                        hBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
        !           501:                        border = rect;
        !           502:                        border.bottom = border.top + cyToolBorder;
        !           503:                        FillRect (hdc, &border, hBrush);
        !           504:                        DeleteObject (hBrush);
        !           505: 
        !           506:                        /* Shade the bottom of the bar dark gray */
        !           507:                        hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW));
        !           508:                        border = rect;
        !           509:                        border.top = border.bottom - cyToolBorder;
        !           510:                        FillRect (hdc, &border, hBrush);
        !           511:                        DeleteObject (hBrush);
        !           512: 
        !           513:                        EndPaint (hwnd, &ps);
        !           514: 
        !           515:                        return DefWindowProc (hwnd, msg, wParam, lParam);
        !           516: 
        !           517:                case WM_DRAWITEM: // Indicates that an owner-draw control needs to be redrawn.
        !           518:                        lpdi = (LPDRAWITEMSTRUCT)lParam;
        !           519:                        switch (lpdi->itemAction) {
        !           520:                                // handle normal drawing of button, but check if its selected or focus
        !           521:                                case ODA_SELECT:
        !           522:                                case ODA_DRAWENTIRE:
        !           523:                                        // handle button pressed down select state -- button down bitmap
        !           524:                                        //   text is right & down 2 pixels
        !           525:                                        hIcon = NULL;
        !           526:                                        for (i=0; i< cntToolCtrls; i++) {
        !           527:                                                if (toolCtrl[i].hwnd == lpdi->hwndItem) {
        !           528:                                                        hIcon = toolCtrl[i].hIcon;
        !           529:                                                }
        !           530:                                        }
        !           531:                                        if (lpdi->itemState & ODS_SELECTED) {
        !           532:                                                DrawButton (lpdi->hDC,lpdi->rcItem, TRUE, hIcon);
        !           533:                                        } else { // not selected -- button up; text is in normal position
        !           534:                                                DrawButton (lpdi->hDC,lpdi->rcItem, FALSE, hIcon);
        !           535:                                        }
        !           536:                                        return TRUE;
        !           537:                        }
        !           538:                        break;
        !           539: 
        !           540:                case WM_COMMAND:
        !           541: #if defined (NT)
        !           542:                        idCtrl = LOWORD(wParam);
        !           543:                        msgCtrl = HIWORD(wParam);
        !           544:                        hwndCtl = (HWND)lParam;
        !           545: #elif defined (WIN16)
        !           546:                        idCtrl = wParam;
        !           547:                        msgCtrl = HIWORD (lParam);
        !           548:                        hwndCtl = LOWORD (lParam);
        !           549: #endif
        !           550: 
        !           551:                        if (GetWindowLong (hwndCtl, GWL_STYLE) & BS_OWNERDRAW) {
        !           552:                                if (msgCtrl == BN_DOUBLECLICKED) {
        !           553:                                        PostMessage (hwndCtl, WM_LBUTTONDOWN, 0, 0);
        !           554:                                        return TRUE;
        !           555:                                }
        !           556:                        }
        !           557:                        PostMessage (hwndMain, msg, wParam, lParam);
        !           558:                        return DefWindowProc (hwnd, msg, wParam, lParam);
        !           559: 
        !           560: 
        !           561:                default:
        !           562:                        return DefWindowProc (hwnd, msg, wParam, lParam);
        !           563:        }
        !           564:        return 0L;
        !           565: }
        !           566: 

unix.superglobalmegacorp.com

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