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

1.1     ! root        1: #include "FirstAid.H" // Just a temporary include while things are in motion
        !             2: 
        !             3: #define NOMINMAX
        !             4: #include <windows.h>
        !             5: #include "FontView.H"
        !             6: #include <stdlib.h>
        !             7: #include <math.h>
        !             8: #include <string.h>
        !             9: #include <time.h>
        !            10: 
        !            11: // So that we can use WNDPROC from Win16:
        !            12: #if defined (WIN16)
        !            13: typedef LONG (APIENTRY *WNDPROC)(HWND, UINT, DWORD, LONG);
        !            14: #endif
        !            15: 
        !            16: 
        !            17: char szAppName[] = "FontView";
        !            18: char szAppTitle[] = "FontView - A Font Examination Utility";
        !            19: 
        !            20: HWND    hwndMain, hwndClient;
        !            21: HWND    hwndMenuField, hwndTimeField, hwndOvrField, hwndBogusField, hwndCapsField, hwndNumField;
        !            22: HWND    hwndLabel1, hwndCreateParam, hwndCreateValue;
        !            23: 
        !            24: LOGFONT lf = {0,0,0,0,0,0,0,0,0,0,0,0,0,""};
        !            25: 
        !            26: HMENU   hSysMenuMain = (HMENU)NULL;
        !            27: HMENU   hFileMenu    = (HMENU)NULL;
        !            28: HMENU   hEditMenu    = (HMENU)NULL;
        !            29: HMENU   hItemMenu    = (HMENU)NULL;
        !            30: HMENU   hHelpMenu    = (HMENU)NULL;
        !            31: HMENU   hSysMenuAdv  = (HMENU)NULL;
        !            32: HMENU   hMenu        = (HMENU)NULL;
        !            33: 
        !            34: 
        !            35: LONG APIENTRY WndProc         (HWND, UINT, UINT, LONG);
        !            36: LONG APIENTRY ClientProc      (HWND, UINT, UINT, LONG);
        !            37: BOOL FillInParam (HWND, int);
        !            38: BOOL FillInValue (HWND, int);
        !            39: int FAR PASCAL EnumFontNames (LPLOGFONT, LPTEXTMETRIC, short, LPINT);
        !            40: 
        !            41: 
        !            42: /* Dialogs.C Prototypes */
        !            43: BOOL APIENTRY SimpleDlgProc   (HWND, UINT, UINT, LONG);
        !            44: BOOL APIENTRY CreateDlgProc   (HWND, UINT, UINT, LONG);
        !            45: BOOL APIENTRY MetricsDlgProc   (HWND, UINT, UINT, LONG);
        !            46: BOOL APIENTRY EnumDlgProc   (HWND, UINT, UINT, LONG);
        !            47: 
        !            48: /* Display.C Prototypes */
        !            49: void DrawAscii (HDC hdc, RECT *pRect, WORD direction);
        !            50: 
        !            51: /* ToolBar.C Prototypes */
        !            52: BOOL InitToolBar (HANDLE);
        !            53: BOOL CreateToolBar (HWND, HANDLE, INT);
        !            54: BOOL AdjustToolBar (HWND);
        !            55: HWND AddToolLabel (HANDLE , INT, LPSTR, INT, DWORD);
        !            56: HWND AddToolCombo (HANDLE, INT, INT, DWORD);
        !            57: HWND AddToolButton (HANDLE, INT, LPSTR, INT, INT, DWORD);
        !            58: BOOL AddToolSpace (INT, INT);
        !            59: int ToolBarHeight (HWND);
        !            60: 
        !            61: /* StatusBar.C Prototypes */
        !            62: BOOL InitStatusBar (HANDLE);
        !            63: BOOL CreateStatusBar (HWND, HANDLE, INT);
        !            64: BOOL AdjustStatusBar (HWND);
        !            65: HWND AddStatusField (HANDLE, INT, INT, INT, BOOL);
        !            66: int StatusBarHeight (HWND);
        !            67: 
        !            68: 
        !            69: int APIENTRY WinMain(HANDLE hInst, HANDLE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
        !            70: {
        !            71: 
        !            72:        MSG         msg;
        !            73:        WNDCLASS    wndclass;
        !            74:        HANDLE      hAccelTable;
        !            75: 
        !            76: #if defined(NT)
        !            77:        // Temporary work-around due to WinMain bugs
        !            78:        nCmdShow = SW_SHOWNORMAL;
        !            79:        hInst = GetModuleHandle( NULL );
        !            80: #endif
        !            81: 
        !            82:        if (!hPrevInst) {
        !            83:                wndclass.style         = CS_HREDRAW | CS_VREDRAW;
        !            84:                wndclass.lpfnWndProc   = (WNDPROC) WndProc;
        !            85:                wndclass.cbClsExtra    = 0;
        !            86:                wndclass.cbWndExtra    = 0;
        !            87:                wndclass.hInstance     = hInst;
        !            88:                wndclass.hIcon         = LoadIcon (hInst, szAppName);
        !            89:                wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
        !            90:                wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE+1);
        !            91:                wndclass.lpszMenuName  = szAppName;
        !            92:                wndclass.lpszClassName = szAppName;
        !            93: 
        !            94:                if (!RegisterClass (&wndclass)) {
        !            95:                        OutputDebugString (__FILE__": RegisterClass(szAppName) Failed\n");
        !            96:                        return FALSE;
        !            97:                }
        !            98: 
        !            99:                wndclass.style         = CS_HREDRAW | CS_VREDRAW;
        !           100:                wndclass.lpfnWndProc   = (WNDPROC) ClientProc;
        !           101:                wndclass.cbClsExtra    = 0;
        !           102:                wndclass.cbWndExtra    = 0;
        !           103:                wndclass.hInstance     = hInst;
        !           104:                wndclass.hIcon         = LoadIcon (hInst, szAppName);
        !           105:                wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
        !           106:                wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        !           107:                wndclass.lpszMenuName  = NULL;
        !           108:                wndclass.lpszClassName = "FontClient";
        !           109: 
        !           110:                if (!RegisterClass (&wndclass)) {
        !           111:                        OutputDebugString (__FILE__": RegisterClass(FontClient) Failed\n");
        !           112:                        return FALSE;
        !           113:                }
        !           114: 
        !           115: 
        !           116:                if (!InitToolBar (hInst)) {
        !           117:                        OutputDebugString (__FILE__": InitToolBar Failed\n");
        !           118:                        return FALSE;
        !           119:                }
        !           120: 
        !           121:                if (!InitStatusBar (hInst)) {
        !           122:                        OutputDebugString (__FILE__": InitStatusBar Failed\n");
        !           123:                        return FALSE;
        !           124:                }
        !           125:        }
        !           126: 
        !           127: 
        !           128:        hwndMain = CreateWindow (szAppName, szAppName,
        !           129:                WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
        !           130:                CW_USEDEFAULT, 0,
        !           131:                CW_USEDEFAULT, 0,
        !           132:                NULL, NULL, hInst, NULL);
        !           133: 
        !           134:        if (!hwndMain) {
        !           135:                OutputDebugString (__FILE__": CreateWindow(hwndMain) Failed\n");
        !           136:                return FALSE;
        !           137:        }
        !           138:        /* Get handles to the various menus. Some of these we will use later */
        !           139:        /* to display menu descriptions in the status bar */
        !           140:        hSysMenuMain = GetSystemMenu(hwndMain,FALSE);
        !           141:        if (!hSysMenuMain) OutputDebugString ("No System Menu\n");
        !           142:        hMenu = GetMenu(hwndMain);
        !           143:        if (hMenu) {
        !           144:                hFileMenu = GetSubMenu(hMenu,0);
        !           145:                hEditMenu = GetSubMenu(hMenu,1);
        !           146:                hItemMenu = GetSubMenu(hMenu,2);
        !           147:                hHelpMenu = GetSubMenu(hMenu,3);
        !           148:        } else {
        !           149:                OutputDebugString ("No Menu Bar!\n");
        !           150:        }
        !           151: 
        !           152: //OutputDebugString (__FILE__": Call CreateToolBar\n");
        !           153:        if (CreateToolBar (hwndMain, hInst, ID_TOOLBAR)) {
        !           154: //OutputDebugString (__FILE__": CreateToolBar Succeeded\n");
        !           155:                hwndLabel1 = AddToolLabel (hInst, 0, "CreateFont:", 0, SS_RIGHT);
        !           156:                AddToolSpace (6, 0);
        !           157:                hwndCreateParam = AddToolCombo (hInst, ID_CREATEPARAM, -25, CBS_DROPDOWN | WS_VSCROLL);
        !           158:                FillInParam (hwndCreateParam, 0);
        !           159: 
        !           160:                AddToolSpace (10, 0);
        !           161:                hwndCreateValue = AddToolCombo (hInst, ID_CREATEVALUE, -30, CBS_DROPDOWN | WS_VSCROLL);
        !           162:                FillInValue (hwndCreateValue, CFP_BASE+0);
        !           163: 
        !           164:        } else {
        !           165:                OutputDebugString (__FILE__": CreateToolBar Failed\n");
        !           166:                return FALSE;
        !           167:        }
        !           168: 
        !           169: //OutputDebugString (__FILE__": Call CreateStatusBar\n");
        !           170: 
        !           171:        if (CreateStatusBar (hwndMain, hInst, ID_STATUSBAR)) {
        !           172: //OutputDebugString (__FILE__": CreateStatusBar Succeeded\n");
        !           173:                hwndMenuField = AddStatusField (hInst, ID_MENUFIELD, 100, 0, FALSE);
        !           174:                hwndTimeField = AddStatusField (hInst, ID_TIMEFIELD, -12, -12, TRUE);
        !           175:                if (hwndTimeField) {
        !           176:                        SetTimer (hwndMain, 1, 1000, NULL);
        !           177:                }
        !           178:                hwndOvrField = AddStatusField (hInst, ID_OVRFIELD, -6, -6, TRUE);
        !           179:                hwndBogusField = AddStatusField (hInst, ID_SCROLLFIELD, -6, -6, FALSE);
        !           180:                hwndCapsField = AddStatusField (hInst, ID_CAPSFIELD, -6, -6, FALSE);
        !           181:                hwndNumField = AddStatusField (hInst, ID_NUMFIELD, -6, -6, FALSE);
        !           182:        } else {
        !           183:                OutputDebugString (__FILE__": CreateStatusBar Failed\n");
        !           184:                return FALSE;
        !           185:        }
        !           186: 
        !           187:        hwndClient = CreateWindow ("FontClient", "FontClient",
        !           188:                WS_CHILD | WS_CLIPSIBLINGS | WS_BORDER | WS_VISIBLE,
        !           189:                0, 0, 0, 0,
        !           190:                hwndMain,(HMENU)666, hInst, NULL);
        !           191: 
        !           192:        if (!hwndMain) {
        !           193:                OutputDebugString (__FILE__": CreateWindow(hwndMain) Failed\n");
        !           194:                return FALSE;
        !           195:        }
        !           196: 
        !           197:        ShowWindow (hwndMain, nCmdShow);
        !           198:        UpdateWindow (hwndMain);
        !           199: 
        !           200:        hAccelTable = LoadAccelerators (hInst, szAppName);
        !           201: 
        !           202: 
        !           203:        while (GetMessage (&msg, NULL, 0, 0)) {
        !           204:                if (!TranslateAccelerator (hwndMain, hAccelTable, &msg)) {
        !           205:                        TranslateMessage (&msg);
        !           206:                        DispatchMessage (&msg);
        !           207:                }
        !           208:        }
        !           209: 
        !           210: 
        !           211:        return msg.wParam;
        !           212: 
        !           213:        lpCmdLine; // Just to resolve reference
        !           214: }
        !           215: 
        !           216: BOOL FillInParam (HWND hwnd, int focus)
        !           217: {
        !           218:                int index;
        !           219: 
        !           220:                index = 0;
        !           221:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nHeight");
        !           222:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_HEIGHT);
        !           223:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nWidth");
        !           224:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_WIDTH);
        !           225:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nEscapement");
        !           226:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_ESCAPEMENT);
        !           227:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nOrientation");
        !           228:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_ORIENTATION);
        !           229:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nWeight");
        !           230:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_WEIGHT);
        !           231:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cItalic");
        !           232:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_ITALIC);
        !           233:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cUnderline");
        !           234:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_UNDERLINE);
        !           235:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cStrikeOut");
        !           236:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_STRIKEOUT);
        !           237:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cCharSet");
        !           238:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_CHARSET);
        !           239:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cOutputPrecision");
        !           240:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_OUTPUTPRECISION);
        !           241:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cClipPrecision");
        !           242:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_CLIPPRECISION);
        !           243:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cQuality");
        !           244:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_QUALITY);
        !           245:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cPitch...");
        !           246:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_PITCH);
        !           247:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"c...Family");
        !           248:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_FAMILY);
        !           249:                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"lpFacename");
        !           250:                SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_FACENAME);
        !           251:                SendMessage (hwnd, CB_SETCURSEL, focus, 0);
        !           252:                return TRUE;
        !           253: }
        !           254: 
        !           255: BOOL FillInValue (HWND hwnd, int param)
        !           256: {
        !           257:        int i, j, index, focus;
        !           258:        long data;
        !           259:        char szTmp[80];
        !           260:        ATOM atom;
        !           261:        HDC  hdc;
        !           262:        FARPROC lpEnumFonts;
        !           263:        HANDLE hInst;
        !           264: 
        !           265:        SendMessage (hwnd, CB_RESETCONTENT, 0, 0);
        !           266:        focus = -1;
        !           267:        index = 0;
        !           268:        switch (param) {
        !           269:                case CFP_HEIGHT:
        !           270:                        for (i=-72; i<72; i+=2) {
        !           271:                                if (i < 0) {
        !           272:                                        wsprintf (szTmp, "%d = cell height = %u", i, abs(i));
        !           273:                                } else if (i == 0) {
        !           274:                                        wsprintf (szTmp, "%u = default", i);
        !           275:                                } else {
        !           276:                                        wsprintf (szTmp, "%u = character height", i);
        !           277:                                }
        !           278:                                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
        !           279:                                SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)i);
        !           280:                        }
        !           281: 
        !           282:                        for (i=0; i<index; i++) {
        !           283:                                data = (long)SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           284:                                if (data == lf.lfHeight) {
        !           285:                                        focus = i;
        !           286:                                        break;
        !           287:                                } else if (data > lf.lfHeight) {
        !           288:                                        wsprintf (szTmp, "%u", lf.lfHeight);
        !           289:                                        SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
        !           290:                                        SendMessage (hwnd, CB_SETITEMDATA, i, (DWORD)lf.lfHeight);
        !           291:                                        focus = i;
        !           292:                                        break;
        !           293:                                }
        !           294:                        }
        !           295:                        if (focus == -1) {
        !           296:                                wsprintf (szTmp, "%u", lf.lfHeight);
        !           297:                                focus = (int)SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
        !           298:                                SendMessage (hwnd, CB_SETITEMDATA, focus, (DWORD)lf.lfHeight);
        !           299:                        }
        !           300: 
        !           301:                        break;
        !           302: 
        !           303:                case CFP_WIDTH:
        !           304:                        for (i=0; i<72; i+=2) {
        !           305:                                if (i==0) {
        !           306:                                        wsprintf (szTmp, "%u = default aspect", i);
        !           307:                                } else {
        !           308:                                        wsprintf (szTmp, "%u", i);
        !           309:                                }
        !           310:                                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
        !           311:                                SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)i);
        !           312:                        }
        !           313:                        for (i=0; i<index; i++) {
        !           314:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           315:                                if (data == lf.lfWidth) {
        !           316:                                        focus = i;
        !           317:                                        break;
        !           318:                                } else if (data > lf.lfWidth) {
        !           319:                                        wsprintf (szTmp, "%u", lf.lfWidth);
        !           320:                                        SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
        !           321:                                        SendMessage (hwnd, CB_SETITEMDATA, i, (DWORD)lf.lfWidth);
        !           322:                                        focus = i;
        !           323:                                        break;
        !           324:                                }
        !           325:                        }
        !           326:                        break;
        !           327: 
        !           328:                case CFP_ESCAPEMENT:
        !           329:                        for (i=0; i<4500; i+=10) {
        !           330:                                wsprintf (szTmp, "%u = (%u * .10 degrees)", i, i);
        !           331:                                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
        !           332:                                SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)i);
        !           333:                        }
        !           334:                        for (i=0; i<index; i++) {
        !           335:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           336:                                if (data == lf.lfEscapement) {
        !           337:                                        focus = i;
        !           338:                                        break;
        !           339:                                } else if (data > lf.lfEscapement) {
        !           340:                                        wsprintf (szTmp, "%u = (%u * .01 degrees)", lf.lfWidth);
        !           341:                                        SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
        !           342:                                        SendMessage (hwnd, CB_SETITEMDATA, i, (DWORD)lf.lfEscapement);
        !           343:                                        focus = i;
        !           344:                                        break;
        !           345:                                }
        !           346:                        }
        !           347:                        break;
        !           348: 
        !           349:                case CFP_ORIENTATION:
        !           350:                        for (i=0; i<4500; i+=10) {
        !           351:                                wsprintf (szTmp, "%u = (%u * .01 degrees)", i, i);
        !           352:                                SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
        !           353:                                SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)i);
        !           354:                        }
        !           355:                        for (i=0; i<index; i++) {
        !           356:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           357:                                if (data == lf.lfOrientation) {
        !           358:                                        focus = i;
        !           359:                                        break;
        !           360:                                } else if (data > lf.lfOrientation) {
        !           361:                                        wsprintf (szTmp, "%u = (%u * .01 degrees)", lf.lfWidth);
        !           362:                                        SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
        !           363:                                        SendMessage (hwnd, CB_SETITEMDATA, i, (DWORD)lf.lfOrientation);
        !           364:                                        focus = i;
        !           365:                                        break;
        !           366:                                }
        !           367:                        }
        !           368:                        break;
        !           369: 
        !           370:                case CFP_WEIGHT:
        !           371:                        index = 0;
        !           372:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = FW_DONTCARE");
        !           373:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 0);
        !           374:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"100 = FW_THIN");
        !           375:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 100);
        !           376:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"200 = FW_EXTRALIGHT");
        !           377:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 200);
        !           378:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"300 = FW_LIGHT");
        !           379:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 300);
        !           380:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"400 = FW_NORMAL");
        !           381:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 400);
        !           382:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"500 = FW_MEDIUM");
        !           383:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 500);
        !           384:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"600 = FW_SEMIBOLD");
        !           385:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 600);
        !           386:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"700 = FW_BOLD");
        !           387:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 700);
        !           388:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"800 = FW_EXTRABOLD");
        !           389:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 800);
        !           390:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"900 = FW_HEAVY");
        !           391:                        SendMessage (hwnd, CB_SETITEMDATA, index++, 900);
        !           392: 
        !           393:                        for (i=0; i<index; i++) {
        !           394:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           395:                                if (data == lf.lfWeight) {
        !           396:                                        focus = i;
        !           397:                                        break;
        !           398:                                } else if (data > lf.lfWeight) {
        !           399:                                        wsprintf (szTmp, "%u", lf.lfWeight);
        !           400:                                        SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
        !           401:                                        focus = i;
        !           402:                                        break;
        !           403:                                }
        !           404:                        }
        !           405:                        break;
        !           406: 
        !           407:                case CFP_ITALIC:
        !           408:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FALSE");
        !           409:                        SendMessage (hwnd, CB_SETITEMDATA, 0, (DWORD)FALSE);
        !           410:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"TRUE");
        !           411:                        SendMessage (hwnd, CB_SETITEMDATA, 1, (DWORD)TRUE);
        !           412:                        focus = (lf.lfItalic?1:0);
        !           413:                        break;
        !           414: 
        !           415:                case CFP_UNDERLINE:
        !           416:                        index=0;
        !           417:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FALSE");
        !           418:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FALSE);
        !           419:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"TRUE");
        !           420:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)TRUE);
        !           421:                        focus = (lf.lfUnderline?1:0);
        !           422:                        break;
        !           423: 
        !           424:                case CFP_STRIKEOUT:
        !           425:                        index=0;
        !           426:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FALSE");
        !           427:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FALSE);
        !           428:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"TRUE");
        !           429:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)TRUE);  
        !           430:                        focus = (lf.lfStrikeOut?1:0);
        !           431:                        break;
        !           432: 
        !           433:                case CFP_CHARSET:
        !           434:                        index = 0;
        !           435:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = ANSI_CHARSET");
        !           436:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)ANSI_CHARSET);
        !           437:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"SYMBOL_CHARSET");
        !           438:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)SYMBOL_CHARSET);
        !           439:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"SHIFTJIS_CHARSET");
        !           440:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)SHIFTJIS_CHARSET);
        !           441:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"OEM_CHARSET");
        !           442:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OEM_CHARSET);
        !           443:                        for (i=0; i<index; i++) {
        !           444:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           445:                                if (data == (long)lf.lfCharSet) {
        !           446:                                        focus = i;
        !           447:                                        break;
        !           448:                                }
        !           449:                        }
        !           450:                        break;
        !           451: 
        !           452:                        break;
        !           453: 
        !           454:                case CFP_OUTPUTPRECISION:
        !           455:                        index=0;
        !           456:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = OUT_DEFAULT_PRECIS");
        !           457:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OUT_DEFAULT_PRECIS);
        !           458:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"OUT_STRING_PRECIS");
        !           459:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OUT_STRING_PRECIS);
        !           460:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"OUT_CHARACTER_PRECIS");
        !           461:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OUT_CHARACTER_PRECIS);
        !           462:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"OUT_STROKE_PRECIS");
        !           463:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OUT_STROKE_PRECIS);
        !           464:                        for (i=0; i<index; i++) {
        !           465:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           466:                                if (data == (long)lf.lfOutPrecision) {
        !           467:                                        focus = i;
        !           468:                                        break;
        !           469:                                }
        !           470:                        }
        !           471:                        break;
        !           472: 
        !           473:                case CFP_CLIPPRECISION:
        !           474:                        index=0;
        !           475:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = CLIP_DEFAULT_PRECIS");
        !           476:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)CLIP_DEFAULT_PRECIS);
        !           477:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"CLIP_CHARACTER_PRECIS");
        !           478:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)CLIP_CHARACTER_PRECIS);
        !           479:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"CLIP_STROKE_PRECIS");
        !           480:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)CLIP_STROKE_PRECIS);
        !           481:                        for (i=0; i<index; i++) {
        !           482:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           483:                                if (data == (long)lf.lfClipPrecision) {
        !           484:                                        focus = i;
        !           485:                                        break;
        !           486:                                }
        !           487:                        }
        !           488:                        break;
        !           489: 
        !           490:                case CFP_QUALITY:
        !           491:                        index=0;
        !           492:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = DEFAULT_QUALITY");
        !           493:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)DEFAULT_QUALITY);
        !           494:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"DRAFT_QUALITY");
        !           495:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)DRAFT_QUALITY);
        !           496:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"PROOF_QUALITY");
        !           497:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)PROOF_QUALITY);
        !           498:                        for (i=0; i<index; i++) {
        !           499:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           500:                                if (data == (long)lf.lfQuality) {
        !           501:                                        focus = i;
        !           502:                                        break;
        !           503:                                }
        !           504:                        }
        !           505:                        break;
        !           506: 
        !           507:                case CFP_PITCH:
        !           508:                        index=0;
        !           509:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = DEFAULT_PITCH");
        !           510:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)DEFAULT_PITCH);
        !           511:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FIXED_PITCH");
        !           512:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FIXED_PITCH);
        !           513:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"VARIABLE_PITCH");
        !           514:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)VARIABLE_PITCH);
        !           515:                        for (i=0; i<index; i++) {
        !           516:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           517:                                if (data == (long)(0x03&lf.lfPitchAndFamily)) {
        !           518:                                        focus = i;
        !           519:                                        break;
        !           520:                                }
        !           521:                        }
        !           522:                        break;
        !           523: 
        !           524:                case CFP_FAMILY:
        !           525:                        index=0;
        !           526:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = FF_DONTCARE");
        !           527:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_DONTCARE);
        !           528:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_ROMAN");
        !           529:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_ROMAN);
        !           530:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_SWISS");
        !           531:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_SWISS);
        !           532:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_MODERN");
        !           533:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_MODERN);
        !           534:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_SCRIPT");
        !           535:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_SCRIPT);
        !           536:                        SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_DECORATIVE");
        !           537:                        SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_DECORATIVE);
        !           538:                        for (i=0; i<index; i++) {
        !           539:                                data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           540:                                if (data == (long)(0xFC&lf.lfPitchAndFamily)) {
        !           541:                                        focus = i;
        !           542:                                        break;
        !           543:                                }
        !           544:                        }
        !           545:                        break;
        !           546: 
        !           547:                case CFP_FACENAME:
        !           548:                        // Need to add ability to notice "(none)" for a null string
        !           549:                        index = (int)SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"(none)");
        !           550:                        SendMessage (hwnd, CB_SETITEMDATA, index, 0);
        !           551:                        if (lstrcmp(lf.lfFaceName, "(none)") == 0) {
        !           552:                                lf.lfFaceName[0] = 0;
        !           553:                        }
        !           554:                        hdc = GetDC (hwnd);
        !           555: #if defined (NT)
        !           556:                        hInst = (HANDLE)GetWindowLong (hwnd, GWL_HINSTANCE);
        !           557: #elif
        !           558:                        hInst = GetWindowWord (hwnd, GWW_HINSTANCE);
        !           559: #endif
        !           560:                        lpEnumFonts = MakeProcInstance ((FARPROC)EnumFontNames, hInst);
        !           561:                        EnumFonts (hdc, NULL, lpEnumFonts, (LPSTR)&hwnd);
        !           562:                        FreeProcInstance (lpEnumFonts);
        !           563:                        ReleaseDC (hwnd, hdc);
        !           564:                        atom = GlobalFindAtom ((LPSTR)lf.lfFaceName);
        !           565:                        if (atom == NULL && (lstrlen (lf.lfFaceName)>0)) {
        !           566:                                index = (int)SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)lf.lfFaceName);
        !           567:                                focus = index;
        !           568:                        } else if (lstrlen(lf.lfFaceName)==0) {
        !           569:                                index = (int)SendMessage (hwnd, CB_FINDSTRING, -1, (DWORD)(LPSTR)"(none)");
        !           570:                                focus = index;
        !           571:                        } else {
        !           572:                                index = (int)SendMessage (hwnd, CB_GETCOUNT, 0, 0);
        !           573:                                for (i=0; i<index; i++) {
        !           574:                                        data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
        !           575:                                        if ((DWORD)data == (DWORD)atom) {
        !           576:                                                focus = i;
        !           577:                                                break;
        !           578:                                        }
        !           579:                                }
        !           580:                        }
        !           581:                        break;
        !           582:        }
        !           583:        if (focus >= 0) {
        !           584:                SendMessage (hwnd, CB_SETCURSEL, focus, 0);
        !           585:        } else {
        !           586:                SendMessage (hwnd, CB_SETCURSEL, 0, 0);
        !           587:        }
        !           588:        j; // unreferenced
        !           589:        return TRUE;
        !           590: }
        !           591: 
        !           592: int FAR PASCAL EnumFontNames (
        !           593:        LPLOGFONT lpLogFont,
        !           594:        LPTEXTMETRIC lpTextMetric,
        !           595:        short nFontType,
        !           596:        LPINT lpData)
        !           597: {
        !           598:        HWND hwnd;
        !           599:        FARPROC lpFontEnumProc;
        !           600:        HDC  hdc;
        !           601:        ATOM atom;
        !           602:        HWND hwndCombo;
        !           603:        int  index;
        !           604:        extern HANDLE hwndMain;
        !           605: 
        !           606: //     hwnd = GetFocus();
        !           607:        hdc  = GetDC(hwndMain);
        !           608:        hwndCombo = (HWND)*lpData;
        !           609: 
        !           610:        atom = GlobalFindAtom ((LPSTR)lpLogFont->lfFaceName);
        !           611:        if (atom == NULL) {
        !           612:                atom = GlobalAddAtom (lpLogFont->lfFaceName);
        !           613:        }
        !           614:        if (index = SendMessage(hwndCombo, CB_FINDSTRING, -1, (DWORD)(LPSTR)lpLogFont->lfFaceName) == CB_ERR) {
        !           615:                index = (int)SendMessage (hwndCombo, CB_ADDSTRING, 0, (DWORD)(LPSTR)lpLogFont->lfFaceName);
        !           616:                SendMessage (hwndCombo, CB_SETITEMDATA, index, atom);
        !           617:        }
        !           618: 
        !           619:        ReleaseDC(hwndMain, hdc);
        !           620: 
        !           621:        lpTextMetric;   // unreferenced
        !           622:        nFontType;      // unreferenced
        !           623:        lpFontEnumProc; // unreferenced
        !           624: 
        !           625:        return TRUE;
        !           626: }
        !           627: 
        !           628: 
        !           629: BOOL CenterWindow (HWND hwndChild, HWND hwndParent)
        !           630: {
        !           631:        RECT    rChild, rParent;
        !           632:        int     wChild, hChild, wParent, hParent;
        !           633:        int     wScreen, hScreen, xNew, yNew;
        !           634:        HDC     hdc;
        !           635: 
        !           636:        GetWindowRect (hwndChild, &rChild);
        !           637:        wChild = rChild.right - rChild.left;
        !           638:        hChild = rChild.bottom - rChild.top;
        !           639: 
        !           640:        GetWindowRect (hwndParent, &rParent);
        !           641:        wParent = rParent.right - rParent.left;
        !           642:        hParent = rParent.bottom - rParent.top;
        !           643: 
        !           644:        hdc = GetDC (hwndChild);
        !           645:        wScreen = GetDeviceCaps (hdc, HORZRES);
        !           646:        hScreen = GetDeviceCaps (hdc, VERTRES);
        !           647:        ReleaseDC (hwndChild, hdc);
        !           648: 
        !           649:        xNew = rParent.left + ((wParent - wChild) /2);
        !           650:        if (xNew < 0) {
        !           651:                xNew = 0;
        !           652:        } else if ((xNew+wChild) > wScreen) {
        !           653:                xNew = wScreen - wChild;
        !           654:        }
        !           655: 
        !           656:        yNew = rParent.top  + ((hParent - hChild) /2);
        !           657:        if (yNew < 0) {
        !           658:                yNew = 0;
        !           659:        } else if ((yNew+hChild) > hScreen) {
        !           660:                yNew = hScreen - hChild;
        !           661:        }
        !           662: 
        !           663:        return SetWindowPos (hwndChild, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
        !           664: }
        !           665: 
        !           666: 
        !           667: #define VK_OEM_SCROLL 0x91 // This isn't in WINDOWS.H, will it always work?
        !           668: 
        !           669: LONG APIENTRY WndProc (HWND hwnd, UINT msg, UINT wParam, LONG lParam)
        !           670: {
        !           671:        HANDLE hInst;
        !           672:        HDC hdc;
        !           673:        PAINTSTRUCT ps;
        !           674:        FARPROC lpDlgFunc;
        !           675:        char    szMsg [80];
        !           676:        time_t  lTime;
        !           677:        struct tm *datetime;
        !           678: #define HOUR (datetime->tm_hour)
        !           679: #define MIN (datetime->tm_min)
        !           680: #define SEC (datetime->tm_sec)
        !           681:        char    szTime [20];
        !           682:        INT     index;
        !           683:        RECT rect;
        !           684: 
        !           685: static INT  idMenuSelect;
        !           686:        INT     tmp, wmEvent, wmId;
        !           687:        HWND    wmhWnd;
        !           688:        POINT   point;
        !           689:        BOOL bRedraw;
        !           690:        ATOM atom;
        !           691:        INT wmMenuCmd, wmFlags;
        !           692:        HMENU wmhMenu;
        !           693: 
        !           694:        atom; // unreferenced
        !           695: 
        !           696: #if defined (NT)
        !           697:        hInst = (HANDLE)GetWindowLong (hwnd, GWL_HINSTANCE);
        !           698: #elif defined (WIN16)
        !           699:        hInst = (HANDLE)GetWindowWord (hwnd, GWW_HINSTANCE);
        !           700: #endif
        !           701: 
        !           702:        switch (msg) {
        !           703:        case WM_CREATE:
        !           704:                        return DefWindowProc (hwnd, msg, wParam, lParam);
        !           705:                        break;
        !           706: 
        !           707:        case WM_TIMER:
        !           708: #ifndef NT
        !           709:        SetWindowText (hwndTimeField, "No Time");
        !           710: #else
        !           711:                time (&lTime);
        !           712:                datetime = localtime (&lTime);
        !           713:                wsprintf (szTime, "%02d:%02d:%02d %s",
        !           714:                (HOUR%12?HOUR%12:12), MIN, SEC, (LPSTR)(HOUR/12?"PM":"AM"));
        !           715:                SetWindowText (hwndTimeField, szTime);
        !           716: #endif
        !           717:                        if (GetKeyState (VK_NUMLOCK)&1) {
        !           718:                                SetWindowText (hwndNumField, "NUM");
        !           719:                        } else {
        !           720:                                SetWindowText (hwndNumField, "");
        !           721:                        }
        !           722:                        if (GetKeyState (VK_CAPITAL)&1) {
        !           723:                                SetWindowText (hwndCapsField, "CAPS");
        !           724:                        } else {
        !           725:                                SetWindowText (hwndCapsField, "");
        !           726:                        }
        !           727:                        if (GetKeyState (VK_INSERT)&1) {
        !           728:                                SetWindowText (hwndOvrField, "OVR");
        !           729:                        } else {
        !           730:                                SetWindowText (hwndOvrField, "");
        !           731:                        }
        !           732: 
        !           733:                        break;
        !           734: 
        !           735:                case WM_SIZE:
        !           736:                        AdjustToolBar (hwnd);
        !           737:                        AdjustStatusBar (hwnd);
        !           738:                        GetClientRect (hwnd, &rect);
        !           739:                        rect.top += ToolBarHeight (hwnd);
        !           740:                        rect.bottom -= StatusBarHeight (hwnd);
        !           741:                        SetWindowPos (hwndClient, NULL, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, SWP_NOZORDER);
        !           742:                        break;
        !           743: 
        !           744:                case WM_KEYUP:
        !           745:                case WM_KEYDOWN:
        !           746:                        if (GetKeyState (VK_NUMLOCK)&1) {
        !           747:                                SetWindowText (hwndNumField, "NUM");
        !           748:                        } else {
        !           749:                                SetWindowText (hwndNumField, "");
        !           750:                        }
        !           751:                        if (GetKeyState (VK_CAPITAL)&1) {
        !           752:                                SetWindowText (hwndCapsField, "CAPS");
        !           753:                        } else {
        !           754:                                SetWindowText (hwndCapsField, "");
        !           755:                        }
        !           756:                        if (GetKeyState (VK_INSERT)&1) {
        !           757:                                SetWindowText (hwndOvrField, "OVR");
        !           758:                        } else {
        !           759:                                SetWindowText (hwndOvrField, "");
        !           760:                        }
        !           761:                        if (GetKeyState (VK_OEM_SCROLL)&1) {
        !           762:                                SetWindowText (hwndBogusField, "SCROLL");
        !           763:                        } else {
        !           764:                                SetWindowText (hwndBogusField, "");
        !           765:                        }
        !           766:                        return DefWindowProc (hwnd, msg, wParam, lParam);
        !           767:                        break;
        !           768: 
        !           769:                case WM_CHAR:
        !           770:                        switch (wParam) {
        !           771:                                case VK_F10:
        !           772:                                        wParam = VK_MENU;
        !           773:                                        return DefWindowProc (hwnd, msg, wParam, lParam);
        !           774:                                        break;
        !           775:                        }
        !           776:                        break;
        !           777: 
        !           778:                case WM_PARENTNOTIFY:
        !           779: #if defined (NT)
        !           780:                        wmEvent = wParam; // Same as Win16, but only on (x,y) msgs
        !           781: #elif defined (WIN16)
        !           782:                        wmEvent = wParam;
        !           783: #endif
        !           784:                        point.x = (INT)LOWORD(lParam);
        !           785:                        point.y = (INT)HIWORD(lParam);
        !           786: 
        !           787:                        ClientToScreen (hwnd, &point);
        !           788:                        wmhWnd  = WindowFromPoint(point);
        !           789:                        if(wmhWnd != NULL){                     /* JAP MOD*/
        !           790: #if defined  (NT)
        !           791:                                wmId = GetWindowLong (wmhWnd, GWL_ID);
        !           792: #elif defined (WIN16)
        !           793:                                wmId = GetWindowWord (wmhWnd, GWW_ID);
        !           794: #endif
        !           795:                        }
        !           796:                        switch (wmEvent) {
        !           797:                                case WM_LBUTTONDOWN:
        !           798:                                case WM_MBUTTONDOWN:
        !           799:                                case WM_RBUTTONDOWN:
        !           800:                                        if (!LoadString (hInst, (UINT)wmId, szMsg, sizeof(szMsg))) {
        !           801:                        wsprintf ((LPSTR)szMsg, "Unable to load ParentNotify string #%u", wmId);
        !           802:                                        }
        !           803:                        break;
        !           804:                case WM_CREATE:
        !           805:                        wsprintf (szMsg,"WM_PARENTNOTIFY: WM_CREATE, id:%i, hwnd:%i\r\n", wmId, wmhWnd);
        !           806: //OutputDebugString (szMsg);
        !           807:                        break;
        !           808: 
        !           809:                case WM_DESTROY:
        !           810:                        wsprintf (szMsg,"WM_PARENTNOTIFY: WM_DESTROY, id:%i, hwnd:%i\r\n", wmId, wmhWnd);
        !           811: //OutputDebugString (szMsg);
        !           812:                        break;
        !           813: 
        !           814:                                default:
        !           815:                                        wsprintf (szMsg,"WM_PARENTNOTIFY: %i, id:%i, hwnd:%i\r\n", wmEvent, wmId, wmhWnd);
        !           816: //OutputDebugString (szMsg);
        !           817:                                        break;
        !           818:                        }
        !           819:                        if (hwndMenuField) {
        !           820:                                SetWindowText (hwndMenuField, szMsg);
        !           821:                        }
        !           822:                        break;
        !           823: 
        !           824:                case WM_COMMAND:
        !           825:                        //wmId = GET_WM_COMMAND_ID (wParam, lParam);
        !           826:                        //wmEvent = GET_WM_COMMAND_CMD (wParam, lParam);
        !           827: #if defined (NT)
        !           828:                        wmId = LOWORD(wParam);
        !           829:                        wmEvent = HIWORD(wParam);
        !           830: #elif defined (WIN16)
        !           831:                        wmId = wParam;
        !           832:                        wmEvent = HIWORD(lParam);
        !           833: #endif
        !           834: 
        !           835:                        switch (wmId) {
        !           836:                                // On the combo boxes, I should probably add code to
        !           837:                                // automatically de-select the edit control if the user
        !           838:                                // clicked in the list box to select something, but
        !           839:                                // unfortunately, there is no single message that comes
        !           840:                                // through that allows me to do this. I would need to
        !           841:                                // keep track of 'state' information regarding if the
        !           842:                                // list ever 'dropped down', and on every SELCHANGE
        !           843:                                // determine if the list is still dropped or not. I would
        !           844:                                // also want to handle a <CR> which would also set the
        !           845:                                // selection, and then de-select the control.
        !           846:                                case ID_CREATEPARAM:
        !           847: 
        !           848:                                        switch (wmEvent) {
        !           849:                                                case CBN_SETFOCUS: //Indicates that the combo box has received input focus.
        !           850:                                                case CBN_DROPDOWN: //Informs the owner of the combo box that its list box is about to be dropped down.
        !           851:                                                        if (!LoadString (hInst, wmId, szMsg, sizeof(szMsg))) {
        !           852:                                                                wsprintf ((LPSTR)szMsg, "Unable to load FontName string #%u", wmId);
        !           853:                                                        }
        !           854:                                                        break;
        !           855: 
        !           856:                                                case CBN_SELCHANGE: //Sent when the selection has been changed.
        !           857:                                                        index = (INT)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, 0);
        !           858:                                                        if (index != CB_ERR) {
        !           859:                                                                SendMessage (hwndCreateParam, CB_GETLBTEXT, index, (LONG)(LPSTR)szMsg);
        !           860:                                                                FillInValue (hwndCreateValue, CFP_BASE+index);
        !           861:                                                        } else {
        !           862:                                                                wsprintf (szMsg, "FontName: CB_ERR while retrieving text");
        !           863:                                                        }
        !           864:                                                        break;
        !           865: 
        !           866:                                                case CBN_DBLCLK: //Sent when the user double-clicks a string with the mouse.
        !           867:                                                        wsprintf (szMsg, "CBN_DBLCLK");
        !           868:                                                        break;
        !           869:                                                case CBN_EDITCHANGE: //Indicates that the user has altered text in the edit control.
        !           870:                                                        wsprintf (szMsg, "CBN_EDITCHANGE");
        !           871:                                                        break;
        !           872:                                                case CBN_EDITUPDATE: //Indicates that the edit control will display altered text.
        !           873:                                                        wsprintf (szMsg, "CBN_EDITUPDATE");
        !           874:                                                        break;
        !           875:                                                case CBN_KILLFOCUS: //Indicates that a combo box has lost input focus.
        !           876:                                                        wsprintf (szMsg, "CBN_KILLFOCUS");
        !           877:                                                        break;
        !           878:                                                default:
        !           879:                                                        wsprintf (szMsg, "WM_COMMAND: DEFAULT");
        !           880:                                                        break;
        !           881:                                        }
        !           882:                                        SetWindowText (hwndMenuField, szMsg);
        !           883:                                        break;
        !           884: 
        !           885:                                case ID_CREATEVALUE:
        !           886:                                        switch (wmEvent){
        !           887:                                                int iCreateParam;
        !           888:                                                int iParamValue;
        !           889: 
        !           890:                                                case CBN_SETFOCUS: //Indicates that the combo box has received input focus.
        !           891:                                                case CBN_DROPDOWN: //Informs the owner of the combo box that its list box is about to be dropped down.
        !           892:                                                        if (!LoadString (hInst, wmId, szMsg, sizeof(szMsg))) {
        !           893:                                                                wsprintf (szMsg, "Unable to load FontSize string #%u", wmId);
        !           894:                                                        }
        !           895:                                                        break;
        !           896: 
        !           897:                                                case CBN_SELCHANGE: //Sent when the selection has been changed.
        !           898:                                                        index = (INT)SendMessage (hwndCreateValue, CB_GETCURSEL, 0, 0);
        !           899:                                                        bRedraw = FALSE;
        !           900:                                                        if (index != CB_ERR) {
        !           901:                                                                SendMessage (hwndCreateValue, CB_GETLBTEXT, index, (LONG)(LPSTR)szMsg);
        !           902:                                                                iCreateParam =
        !           903:                                                                        (int)SendMessage (hwndCreateParam, CB_GETITEMDATA,
        !           904:                                                                                (WORD)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, (DWORD)0),
        !           905:                                                                        (DWORD)0);
        !           906:                                                                iParamValue = (int)SendMessage (hwndCreateValue, CB_GETITEMDATA, index, 0);
        !           907: 
        !           908:                                                                switch (iCreateParam) {
        !           909:                                                                        BYTE tmpByte;
        !           910: 
        !           911:                                                                        case CFP_HEIGHT:
        !           912:                                                                                if (lf.lfHeight != iParamValue) {
        !           913:                                                                                        lf.lfHeight = iParamValue;
        !           914:                                                                                        bRedraw = TRUE;
        !           915:                                                                                }
        !           916:                                                                                break;
        !           917: 
        !           918:                                                                        case CFP_WIDTH:
        !           919:                                                                                if (lf.lfWidth != iParamValue) {
        !           920:                                                                                        lf.lfWidth = iParamValue;
        !           921:                                                                                        bRedraw = TRUE;
        !           922:                                                                                }
        !           923:                                                                                break;
        !           924: 
        !           925:                                                                        case CFP_ESCAPEMENT:
        !           926:                                                                                if (lf.lfEscapement != iParamValue) {
        !           927:                                                                                        lf.lfEscapement= iParamValue;
        !           928:                                                                                        bRedraw = TRUE;
        !           929:                                                                                }
        !           930:                                                                                break;
        !           931: 
        !           932:                                                                        case CFP_ORIENTATION:
        !           933:                                                                                if (lf.lfOrientation!= iParamValue) {
        !           934:                                                                                        lf.lfOrientation= iParamValue;
        !           935:                                                                                        bRedraw = TRUE;
        !           936:                                                                                }
        !           937:                                                                                break;
        !           938: 
        !           939:                                                                        case CFP_WEIGHT:
        !           940:                                                                                if (lf.lfWeight != iParamValue) {
        !           941:                                                                                        lf.lfWeight= iParamValue;
        !           942:                                                                                        bRedraw = TRUE;
        !           943:                                                                                }
        !           944:                                                                                break;
        !           945: 
        !           946:                                                                        case CFP_ITALIC:
        !           947:                                                                                if ((int)lf.lfItalic != iParamValue) {
        !           948:                                                                                        lf.lfItalic = (BYTE)iParamValue;
        !           949:                                                                                        bRedraw = TRUE;
        !           950:                                                                                }
        !           951:                                                                                break;
        !           952: 
        !           953:                                                                        case CFP_UNDERLINE:
        !           954:                                                                                if (lf.lfUnderline != (BYTE)iParamValue) {
        !           955:                                                                                        lf.lfUnderline= (BYTE)iParamValue;
        !           956:                                                                                        bRedraw = TRUE;
        !           957:                                                                                }
        !           958:                                                                                break;
        !           959: 
        !           960:                                                                        case CFP_STRIKEOUT:
        !           961:                                                                                if (lf.lfStrikeOut != (BYTE)iParamValue) {
        !           962:                                                                                        lf.lfStrikeOut= (BYTE)iParamValue;
        !           963:                                                                                        bRedraw = TRUE;
        !           964:                                                                                }
        !           965:                                                                                break;
        !           966: 
        !           967:                                                                        case CFP_CHARSET:
        !           968:                                                                                if (lf.lfCharSet != (BYTE)iParamValue) {
        !           969:                                                                                        lf.lfCharSet= (BYTE)iParamValue;
        !           970:                                                                                        bRedraw = TRUE;
        !           971:                                                                                }
        !           972:                                                                                break;
        !           973: 
        !           974:                                                                        case CFP_OUTPUTPRECISION:
        !           975:                                                                                if (lf.lfOutPrecision != (BYTE)iParamValue) {
        !           976:                                                                                        lf.lfOutPrecision = (BYTE)iParamValue;
        !           977:                                                                                        bRedraw = TRUE;
        !           978:                                                                                }
        !           979:                                                                                break;
        !           980: 
        !           981:                                                                        case CFP_CLIPPRECISION:
        !           982:                                                                                if (lf.lfClipPrecision != (BYTE)iParamValue) {
        !           983:                                                                                        lf.lfClipPrecision = (BYTE)iParamValue;
        !           984:                                                                                        bRedraw = TRUE;
        !           985:                                                                                }
        !           986:                                                                                break;
        !           987: 
        !           988:                                                                        case CFP_QUALITY:
        !           989:                                                                                if (lf.lfQuality != (BYTE)iParamValue) {
        !           990:                                                                                        lf.lfQuality = (BYTE)iParamValue;
        !           991:                                                                                        bRedraw = TRUE;
        !           992:                                                                                }
        !           993:                                                                                break;
        !           994: 
        !           995:                                                                        case CFP_PITCH:
        !           996:                                                                                tmpByte = lf.lfPitchAndFamily;
        !           997:                                                                                tmpByte &= 0xFC;
        !           998:                                                                                tmpByte |= iParamValue;
        !           999:                                                                                if (tmpByte != lf.lfPitchAndFamily) {
        !          1000:                                                                                        lf.lfPitchAndFamily = tmpByte;
        !          1001:                                                                                        bRedraw = TRUE;
        !          1002:                                                                                }
        !          1003:                                                                                break;
        !          1004: 
        !          1005:                                                                        case CFP_FAMILY:
        !          1006:                                                                                tmpByte = lf.lfPitchAndFamily;
        !          1007:                                                                                tmpByte &= 0x03;
        !          1008:                                                                                tmpByte |= iParamValue;
        !          1009:                                                                                if (tmpByte != lf.lfPitchAndFamily) {
        !          1010:                                                                                        lf.lfPitchAndFamily = tmpByte;
        !          1011:                                                                                        bRedraw = TRUE;
        !          1012:                                                                                }
        !          1013:                                                                                break;
        !          1014: 
        !          1015:                                                                        case CFP_FACENAME:
        !          1016:                                                                                if (lstrcmp (lf.lfFaceName, szMsg)!=0) {
        !          1017:                                                                                        if (lstrcmp(lf.lfFaceName, "(none)") == 0) {
        !          1018:                                                                                                lf.lfFaceName[0] = 0;
        !          1019:                                                                                        } else {
        !          1020:                                                                                                wsprintf (lf.lfFaceName, "%s",(LPSTR)szMsg);
        !          1021:                                                                                                bRedraw = TRUE;
        !          1022:                                                                                        }
        !          1023:                                                                                }
        !          1024:                                                                                break;
        !          1025:                                                                }
        !          1026:                                                        } else {
        !          1027:                                                                wsprintf (szMsg, "CreateValue: CB_ERR while retrieving text");
        !          1028:                                                        }
        !          1029:                                                        if (bRedraw) {
        !          1030:                                                                InvalidateRect (hwndClient, NULL, TRUE);
        !          1031:                                                        }
        !          1032:                                                        break;
        !          1033: 
        !          1034:                                                case CBN_DBLCLK: //Sent when the user double-clicks a string with the mouse.
        !          1035:                                                        wsprintf (szMsg, "CBN_DBLCLK");
        !          1036:                                                        break;
        !          1037:                                                case CBN_EDITCHANGE: //Indicates that the user has altered text in the edit control.
        !          1038:                                                        wsprintf (szMsg, "CBN_EDITCHANGE");
        !          1039:                                                        break;
        !          1040:                                                case CBN_EDITUPDATE: //Indicates that the edit control will display altered text.
        !          1041:                                                        wsprintf (szMsg, "CBN_EDITUPDATE");
        !          1042:                                                        break;
        !          1043:                                                case CBN_KILLFOCUS: //Indicates that a combo box has lost input focus.
        !          1044:                                                        wsprintf (szMsg, "CBN_KILLFOCUS");
        !          1045:                                                        break;
        !          1046:                                                default:
        !          1047:                                                        wsprintf (szMsg, "WM_COMMAND: DEFAULT");
        !          1048:                                                        break;
        !          1049:                                        }
        !          1050:                                        SetWindowText (hwndMenuField, szMsg);
        !          1051:                                        break;
        !          1052: 
        !          1053:                                // The Menu Selections
        !          1054:                                case IDM_NEW:
        !          1055:                                case IDM_OPEN:
        !          1056:                                case IDM_CLOSE:
        !          1057:                                case IDM_SAVE:
        !          1058:                                case IDM_SAVEAS:
        !          1059:                                case IDM_PRINT:
        !          1060:                                case IDM_PRINTSET:
        !          1061:                                        SetWindowText (hwndMenuField, "This command is not yet implemented.");
        !          1062:                                        break;
        !          1063: 
        !          1064:                                case IDM_EXIT:
        !          1065:                                        DestroyWindow(hwnd);
        !          1066:                                        break;
        !          1067: 
        !          1068:                                case IDM_UNDO:
        !          1069:                                case IDM_CUT:
        !          1070:                                case IDM_COPY:
        !          1071:                                case IDM_PASTE:
        !          1072:                                case IDM_DELETE:
        !          1073:                                case IDM_FIND:
        !          1074:                                case IDM_REPLACE:
        !          1075:                                        SetWindowText (hwndMenuField, "This command is not yet implemented.");
        !          1076:                                        break;
        !          1077: 
        !          1078:                                case IDM_TOOLBAR:
        !          1079:                                        break;
        !          1080: 
        !          1081:                                case IDM_STATUSBAR:
        !          1082:                                        break;
        !          1083: 
        !          1084:                                case IDM_TEST1:
        !          1085:                                        lpDlgFunc = MakeProcInstance((FARPROC) CreateDlgProc, hInst);
        !          1086: #if defined (NT)
        !          1087:                                        DialogBoxParam(hInst, "CreateFont", hwnd, (WNDPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
        !          1088: #elif defined (WIN16)
        !          1089:                                        DialogBoxParam(hInst, "CreateFont",  hwnd,  (FARPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
        !          1090: #endif
        !          1091:                                        FreeProcInstance(lpDlgFunc);
        !          1092:                                        index = (INT)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, 0);
        !          1093:                                        if (index != CB_ERR) {
        !          1094:                                                FillInValue (hwndCreateValue, CFP_BASE+index);
        !          1095:                                        } else {
        !          1096:                                                wsprintf (szMsg, "CreateFont: CB_ERR while setting values");
        !          1097:                                        }
        !          1098:                                        InvalidateRect (hwndClient, NULL, TRUE);
        !          1099: 
        !          1100:                                        break;
        !          1101: 
        !          1102:                                case IDM_TEST2:
        !          1103:                                        lpDlgFunc = MakeProcInstance((FARPROC) MetricsDlgProc, hInst);
        !          1104: #if defined (NT)
        !          1105:                                        DialogBoxParam(hInst, "TextMetric", hwnd, (WNDPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
        !          1106: #elif defined (WIN16)
        !          1107:                                        DialogBoxParam(hInst, "TextMetric",  hwnd,  (FARPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
        !          1108: #endif
        !          1109:                                        FreeProcInstance(lpDlgFunc);
        !          1110:                                        index = (INT)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, 0);
        !          1111:                                        if (index != CB_ERR) {
        !          1112:                                                FillInValue (hwndCreateValue, CFP_BASE+index);
        !          1113:                                        } else {
        !          1114:                                                wsprintf (szMsg, "CreateFont: CB_ERR while setting values");
        !          1115:                                        }
        !          1116:                                        InvalidateRect (hwndClient, NULL, TRUE);
        !          1117:                                        break;
        !          1118:                                case IDM_TEST3:
        !          1119:                                        lpDlgFunc = MakeProcInstance((FARPROC) EnumDlgProc, hInst);
        !          1120: #if defined (NT)
        !          1121:                                        DialogBoxParam(hInst, "EnumFonts", hwnd, (WNDPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
        !          1122: #elif defined (WIN16)
        !          1123:                                        DialogBoxParam(hInst, "EnumFonts",  hwnd,  (FARPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
        !          1124: #endif
        !          1125:                                        FreeProcInstance(lpDlgFunc);
        !          1126:                                        index = (INT)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, 0);
        !          1127:                                        if (index != CB_ERR) {
        !          1128:                                                FillInValue (hwndCreateValue, CFP_BASE+index);
        !          1129:                                        } else {
        !          1130:                                                wsprintf (szMsg, "CreateFont: CB_ERR while setting values");
        !          1131:                                        }
        !          1132:                                        InvalidateRect (hwndClient, NULL, TRUE);
        !          1133:                                        break;
        !          1134:                                case IDM_TEST4:
        !          1135:                                        break;
        !          1136: 
        !          1137:                                case IDM_USAGE:
        !          1138:                                        strcpy(szMsg, "Usage");
        !          1139:                                                                                if (WinHelp (hwnd, "FontView.HLP", HELP_KEY, (DWORD)(LPSTR)szMsg)) {
        !          1140:                                                SetWindowText (hwndMenuField, "WinHelp suceeded");
        !          1141:                                        } else {
        !          1142:                                                SetWindowText (hwndMenuField, "WinHelp failed");
        !          1143:                                        }
        !          1144:                                        break;
        !          1145: 
        !          1146:                                case IDM_ABOUT:
        !          1147:                                        lpDlgFunc = MakeProcInstance((FARPROC) SimpleDlgProc, hInst);
        !          1148: #if defined (NT)
        !          1149:                                        DialogBox(hInst,
        !          1150:                                                (wmId==IDM_ABOUT)?"AboutBox":"UsageBox",
        !          1151:                                                hwnd,
        !          1152:                                                (WNDPROC)lpDlgFunc);
        !          1153: #elif defined (WIN16)
        !          1154:                        DialogBox(hInst,
        !          1155:                                                (wmId==IDM_ABOUT)?"AboutBox":"UsageBox",
        !          1156:                                                hwnd,
        !          1157:                                                (FARPROC)lpDlgFunc);
        !          1158: #endif
        !          1159:                                        FreeProcInstance(lpDlgFunc);
        !          1160:                                        break;
        !          1161: 
        !          1162: 
        !          1163: 
        !          1164:                        }
        !          1165:                        break;
        !          1166: 
        !          1167:        case WM_PAINT:
        !          1168:                        hdc = BeginPaint (hwnd, &ps);
        !          1169:                        EndPaint (hwnd, &ps);
        !          1170:                        break;
        !          1171: 
        !          1172:        case WM_MENUSELECT:
        !          1173:                /* A menu item is hilited, get description text for status bar */
        !          1174:                //DebugBreak();
        !          1175:                tmp = idMenuSelect;
        !          1176: 
        !          1177: #if defined (NT)
        !          1178:                wmMenuCmd = LOWORD(wParam);
        !          1179:                wmFlags = HIWORD(wParam);
        !          1180:                wmhMenu = (HMENU)lParam;
        !          1181: #elif defined (WIN16)
        !          1182:                wmMenuCmd =  wParam;
        !          1183:                wmFlags = LOWORD(lParam);
        !          1184:                wmhMenu = (HMENU)HIWORD(lParam);
        !          1185: #endif
        !          1186: 
        !          1187:                if((wmhMenu == 0) && (wmFlags = -1)) {
        !          1188:                                tmp = idMenuSelect = 0;
        !          1189:                                SetWindowText(hwndMenuField, "Ready...");
        !          1190:                } else if(wmhMenu == 0) {
        !          1191:                        /* don't do anything for this */
        !          1192:                } else if(wmFlags & MF_POPUP) {
        !          1193:                        if((HMENU)wmMenuCmd == hSysMenuMain)
        !          1194:                                        idMenuSelect = IDM_SYSMENU;
        !          1195:                        else if((HMENU)wmMenuCmd == hFileMenu)
        !          1196:                                        idMenuSelect = IDM_FILE;
        !          1197:                        else if((HMENU)wmMenuCmd == hEditMenu)
        !          1198:                                        idMenuSelect = IDM_EDIT;
        !          1199:                        else if((HMENU)wmMenuCmd == hItemMenu)
        !          1200:                                        idMenuSelect = IDM_ITEM;
        !          1201:                        else if((HMENU)wmMenuCmd == hHelpMenu)
        !          1202:                                        idMenuSelect = IDM_HELP;
        !          1203:                } else {
        !          1204:                        if(wmMenuCmd != 0) {            /* separators have wparam of 0 */
        !          1205:                                idMenuSelect = wmMenuCmd;
        !          1206:                        }
        !          1207:                }
        !          1208: 
        !          1209:                if (idMenuSelect != tmp) {
        !          1210:                        if (!LoadString ( hInst, (int)idMenuSelect, szMsg, sizeof(szMsg))) {
        !          1211:                                if(idMenuSelect != (WORD)-1){
        !          1212:                                        wsprintf ((LPSTR)szMsg, "Unable to load menu string #%u", idMenuSelect);
        !          1213:                                }
        !          1214:                                else{
        !          1215:                                        strcpy(szMsg, "Unsupported Function");
        !          1216:                                }               
        !          1217:                        }
        !          1218:                        SetWindowText (hwndMenuField, szMsg);
        !          1219:                }
        !          1220:                break;
        !          1221: 
        !          1222:                case WM_QUERYENDSESSION:
        !          1223:                        return (MessageBox (GetFocus(), "Exit Application?", szAppTitle,
        !          1224:                                MB_ICONQUESTION | MB_YESNO) == IDYES);
        !          1225: 
        !          1226:                case WM_DESTROY:
        !          1227:                        if (hwnd == hwndMain) {
        !          1228:                                PostQuitMessage (0);
        !          1229:                        }
        !          1230:                        break;
        !          1231: 
        !          1232:                default:
        !          1233:                        return DefWindowProc (hwnd, msg, wParam, lParam);
        !          1234:        }
        !          1235:        return 0L;
        !          1236: 
        !          1237: #if defined(NOTIME)
        !          1238:        szTime; lTime; datetime; //Just to resolve references
        !          1239: #endif
        !          1240: }
        !          1241: 
        !          1242: LONG APIENTRY ClientProc (HWND hwnd, UINT msg, UINT wParam, LONG lParam)
        !          1243: {
        !          1244:        HANDLE hInst;
        !          1245:        PAINTSTRUCT ps;
        !          1246:        HFONT hfont, hfontPrev;
        !          1247:        RECT rect;
        !          1248:        HDC hdc;
        !          1249: 
        !          1250: #if defined (NT)
        !          1251:        hInst = (HANDLE)GetWindowLong (hwnd, GWL_HINSTANCE);
        !          1252: #elif defined (WIN16)
        !          1253:        hInst = (HANDLE)GetWindowWord (hwnd, GWW_HINSTANCE);
        !          1254: #endif
        !          1255: 
        !          1256:        switch (msg) {
        !          1257:                case WM_PAINT:
        !          1258:                                hdc = BeginPaint (hwnd, &ps);
        !          1259:                                hfont = CreateFontIndirect (&lf);
        !          1260:                                hfontPrev = SelectObject (hdc, hfont);
        !          1261:                                GetClientRect (hwnd, &rect);
        !          1262:                                DrawAscii (hdc, &rect, 0);
        !          1263:                                SelectObject (hdc, hfontPrev);
        !          1264:                                DeleteObject (hfont);
        !          1265:                                EndPaint (hwnd, &ps);
        !          1266:                                break;
        !          1267: 
        !          1268:                default:
        !          1269:                        return DefWindowProc (hwnd, msg, wParam, lParam);
        !          1270:        }
        !          1271:        return 0L;
        !          1272: }
        !          1273: 
        !          1274: 

unix.superglobalmegacorp.com

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