Annotation of mstools/samples/memory/memory.c, revision 1.1.1.2

1.1       root        1: /****************************** Module Header ******************************\
                      2: * Module Name: memory.c
                      3: *
                      4: * Copyright (c) 1991, Microsoft Corporation
                      5: *
                      6: *
                      7: *
                      8: * History:
                      9: * 09-17-91 PetrusW     Created.
                     10: *
                     11: \***************************************************************************/
                     12: 
                     13: #include <stdlib.h>
                     14: 
                     15: #include "memory.h"
                     16: #include <stdarg.h>
                     17: 
                     18: extern CreateMapFile();
                     19: extern CreateMap();
                     20: extern MapView();
                     21: extern OpenMap();
                     22: 
                     23: 
                     24: HANDLE ghModule;
                     25: HWND   ghwndMain = NULL;
                     26: 
                     27: HMENU  hMenu,      hMenuWindow;
                     28: HMENU  hServerMenu, hServerMenuWindow;
                     29: HMENU  hClientMenu, hClientMenuWindow;
                     30: 
                     31: CHAR   gszFile[20];
                     32: CHAR   gszMapName[20];
                     33: 
                     34: 
                     35: typedef struct _PerWndInfo {
                     36: //    HWND    hMainFrame;
                     37:     HWND    hParent;
                     38:     HWND    hThisWnd;          // CR!     used in locating the node
                     39: //    LPVOID  pShrMem1;        // LATER!  create more clients/servers
                     40:     RECT    rcClient;
                     41:     char    CaptionBarText[SIZEOFCAPTIONTEXT];
                     42: } PERWNDINFO, *PPERWNDINFO;
                     43: 
                     44: 
                     45: typedef struct _node {
                     46:     PERWNDINFO     ChildWnd;
                     47:     HANDLE         hNext;
                     48: } NODE, *PNODE;
                     49: 
                     50: 
                     51: /*
                     52:  * Forward declarations.
                     53:  */
                     54: BOOL InitializeApp   (void);
                     55: LONG MainWndProc     (HWND, UINT, DWORD, LONG);
                     56: LONG ServerWndProc   (HWND, UINT, DWORD, LONG);
                     57: LONG ClientWndProc   (HWND, UINT, DWORD, LONG);
                     58: LONG About          (HWND, UINT, DWORD, LONG);
                     59: LONG FileType       (HWND, UINT, DWORD, LONG);
                     60: LONG MapFileName     (HWND, UINT, DWORD, LONG);
                     61: LONG TextWndProc     (HWND, UINT, DWORD, LONG);
                     62: 
                     63: /***************************************************************************\
                     64: * main
                     65: *
                     66: *
                     67: * History:
                     68: * 04-17-91 ScottLu      Created.
                     69: \***************************************************************************/
                     70: 
                     71: int WinMain(
                     72:     HANDLE hInstance,
                     73:     HANDLE hPrevInstance,
                     74:     LPSTR lpCmdLine,
                     75:     int nShowCmd)
                     76: {
                     77:     MSG msg;
                     78: 
                     79:     // this will change to something more reasonable
                     80: 
                     81:     ghModule = GetModuleHandle(NULL);
                     82:     if (!InitializeApp()) {
                     83:        MessageBox(ghwndMain, "memory: InitializeApp failure!", "Error", MB_OK);
                     84:         return 0;
                     85:     }
                     86: 
                     87:     while (GetMessage(&msg, NULL, 0, 0)) {
                     88:         TranslateMessage(&msg);
                     89:         DispatchMessage(&msg);
                     90:     }
                     91: 
                     92:     if (hMenuWindow && IsWindow(hMenuWindow))
                     93:        DestroyMenu(hMenuWindow);
                     94:     if (hClientMenuWindow && IsWindow(hClientMenuWindow))
                     95:        DestroyMenu(hClientMenuWindow);
                     96:     if (hServerMenuWindow && IsWindow(hServerMenuWindow))
                     97:        DestroyMenu(hServerMenuWindow);
                     98:     if (hMenu && IsWindow(hMenu))
                     99:        DestroyMenu(hMenu);
                    100:     if (hClientMenu && IsWindow(hClientMenu))
                    101:        DestroyMenu(hClientMenu);
                    102:     if (hServerMenu && IsWindow(hServerMenu))
                    103:        DestroyMenu(hServerMenu);
                    104: 
                    105:     return 1;
                    106: 
                    107:     UNREFERENCED_PARAMETER(lpCmdLine);
                    108:     UNREFERENCED_PARAMETER(nShowCmd);
                    109:     UNREFERENCED_PARAMETER(hInstance);
                    110:     UNREFERENCED_PARAMETER(hPrevInstance);
                    111: }
                    112: 
                    113: 
                    114: /***************************************************************************\
                    115: * InitializeApp
                    116: *
                    117: * History:
                    118: * 09-09-91 PetrusW     Created.
                    119: \***************************************************************************/
                    120: 
                    121: BOOL InitializeApp(void)
                    122: {
                    123:     WNDCLASS wc;
                    124: 
                    125:     wc.style            = CS_OWNDC;
1.1.1.2 ! root      126:     wc.lpfnWndProc     = (WNDPROC)MainWndProc;
1.1       root      127:     wc.cbClsExtra       = 0;
                    128:     wc.cbWndExtra      = sizeof(LONG);
                    129:     wc.hInstance        = ghModule;
                    130:     wc.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
                    131:     wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
                    132:     wc.hbrBackground   = (HBRUSH)(COLOR_APPWORKSPACE);
                    133:     wc.lpszMenuName     = "MainMenu";
                    134:     wc.lpszClassName   = "MemoryClass";
                    135: 
                    136:     if (!RegisterClass(&wc))
                    137:        return FALSE;
                    138: 
                    139:     wc.style           = CS_OWNDC;
1.1.1.2 ! root      140:     wc.lpfnWndProc     = (WNDPROC)ServerWndProc;
1.1       root      141:     wc.cbClsExtra       = 0;
                    142:     wc.cbWndExtra      = 0;                      // LATER sizeof(LONG);
                    143:     wc.hInstance        = ghModule;
                    144:     wc.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
                    145:     wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
                    146:     wc.hbrBackground   = (HBRUSH)(COLOR_APPWORKSPACE);
                    147:     wc.lpszMenuName    = NULL;
                    148:     wc.lpszClassName   = "ServerClass";
                    149: 
                    150:     if (!RegisterClass(&wc))
                    151:         return FALSE;
                    152: 
                    153:     wc.style           = CS_OWNDC;
1.1.1.2 ! root      154:     wc.lpfnWndProc     = (WNDPROC)ClientWndProc;
1.1       root      155:     wc.cbClsExtra       = 0;
                    156:     wc.cbWndExtra      = 0;                      // LATER sizeof(LONG);
                    157:     wc.hInstance        = ghModule;
                    158:     wc.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
                    159:     wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
                    160:     wc.hbrBackground   = (HBRUSH)(COLOR_APPWORKSPACE);
                    161:     wc.lpszMenuName    = NULL;
                    162:     wc.lpszClassName   = "ClientClass";
                    163: 
                    164:     if (!RegisterClass(&wc))
                    165:        return FALSE;
                    166: 
                    167:     wc.style           = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
1.1.1.2 ! root      168:     wc.lpfnWndProc     = (WNDPROC)TextWndProc;
1.1       root      169:     wc.cbClsExtra      = 0;
                    170:     wc.cbWndExtra      = 0;
                    171:     wc.hInstance        = ghModule;
                    172:     wc.hIcon           = NULL;
                    173:     wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
                    174:     wc.hbrBackground   = (HBRUSH)(COLOR_BTNSHADOW);
                    175:     wc.lpszMenuName    = NULL;
                    176:     wc.lpszClassName   = "Text";
                    177: 
                    178:     if (!RegisterClass(&wc))
                    179:             return FALSE;
                    180: 
                    181: 
                    182: 
                    183:     hMenu      = LoadMenu(ghModule, "MainMenu");
                    184:     hServerMenu = LoadMenu(ghModule, "ServerMenu");
                    185:     hClientMenu = LoadMenu(ghModule, "ClientMenu");
                    186:     hMenuWindow       = GetSubMenu(hMenu, 1);
                    187:     hServerMenuWindow = GetSubMenu(hServerMenu, 2);
                    188:     hClientMenuWindow = GetSubMenu(hClientMenu, 2);
                    189: 
                    190:     ghwndMain = CreateWindowEx(0L, "MemoryClass", "Memory",
                    191:            WS_OVERLAPPED   | WS_CAPTION     | WS_BORDER       |
                    192:            WS_THICKFRAME   | WS_MAXIMIZEBOX | WS_MINIMIZEBOX  |
                    193:            WS_CLIPCHILDREN | WS_VISIBLE     | WS_SYSMENU,
                    194:             80, 70, 400, 300,
                    195:            NULL, hMenu, ghModule, NULL);
                    196: 
                    197:     if (ghwndMain == NULL)
                    198:        return FALSE;
                    199: 
                    200:     SetWindowLong(ghwndMain, GWL_USERDATA, 0L);
                    201: 
                    202:     SetFocus(ghwndMain);    /* set initial focus */
                    203: 
                    204:     return TRUE;
                    205: }
                    206: 
                    207: 
                    208: /***************************************************************************\
                    209: * MainWndProc
                    210: *
                    211: * History:
                    212: * 09-09-91 PetrusW     Created.
                    213: \***************************************************************************/
                    214: 
                    215: long MainWndProc(
                    216:     HWND hwnd,
                    217:     UINT message,
                    218:     DWORD wParam,
                    219:     LONG lParam)
                    220: {
                    221:     static int        iSvrCount=1;
                    222:     static int        iCltCount=1;
                    223:     static HWND        hwndClient;
                    224:     CLIENTCREATESTRUCT clientcreate;
                    225:     HWND               hwndChildWindow;
                    226: 
                    227: 
                    228:     switch (message) {
                    229: 
                    230:       case WM_CREATE:
                    231:        SetWindowLong(hwnd, 0, (LONG)NULL);
                    232: 
                    233:        clientcreate.hWindowMenu  = hMenuWindow;
                    234:        clientcreate.idFirstChild = 1;
                    235: 
                    236:        hwndClient = CreateWindow("MDICLIENT", NULL,
                    237:                                    WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
                    238:                                    0,0,0,0,
                    239:                                    hwnd, NULL, ghModule, (LPVOID)&clientcreate);
                    240:        return 0L;
                    241: 
                    242:       case WM_DESTROY: {
                    243:        PostQuitMessage(0);
                    244:        return 0L;
                    245:       }
                    246: 
                    247:       case WM_COMMAND:
                    248: 
                    249:        switch (LOWORD(wParam)) {
                    250:            case IDM_TILE:
                    251:                SendMessage(hwndClient, WM_MDITILE, 0L, 0L);
                    252:                return 0L;
                    253:            case IDM_CASCADE:
                    254:                SendMessage(hwndClient, WM_MDICASCADE, 0L, 0L);
                    255:                return 0L;
                    256:            case IDM_ARRANGE:
                    257:                SendMessage(hwndClient, WM_MDIICONARRANGE, 0L, 0L);
                    258:                return 0L;
                    259: 
                    260:            case MM_SERVER: {
                    261:                HANDLE hNode, hHead;
                    262:                PNODE  pNode;
                    263:                 MDICREATESTRUCT mdicreate;
                    264: 
                    265:                hNode = LocalAlloc(LHND, (WORD) sizeof(NODE));
                    266:                if (hNode) {
                    267:                    if ((pNode = (PNODE)LocalLock(hNode)) == NULL)
                    268:                        MessageBox(ghwndMain, "Failed in LocalLock, hNode", "Error", MB_OK);
                    269: 
                    270:                    wsprintf((LPSTR) &(pNode->ChildWnd.CaptionBarText),
                    271:                             "Server %d", iSvrCount);
                    272: 
                    273:                    mdicreate.szClass = "ServerClass";
                    274:                    mdicreate.szTitle = (LPTSTR)&(pNode->ChildWnd.CaptionBarText);
                    275:                    mdicreate.hOwner  = ghModule;
                    276:                    mdicreate.x       =
                    277:                    mdicreate.y       =
                    278:                    mdicreate.cx      =
                    279:                    mdicreate.cy      = CW_USEDEFAULT;
                    280:                    mdicreate.style   = 0l;
                    281:                    mdicreate.lParam  = 0L;
                    282: 
                    283:                    /*Create Child Window*/
                    284:                    hwndChildWindow =
                    285:                        (HANDLE) SendMessage(hwndClient, WM_MDICREATE,
                    286:                                    0L,
                    287:                                    (LONG)(LPMDICREATESTRUCT)&mdicreate);
                    288: 
                    289:                    if (hwndChildWindow == NULL) {
                    290:                        MessageBox(ghwndMain, "Failed in Creating Child Window", "Error", MB_OK);
                    291:                        return 0L;
                    292:                    }
                    293: 
                    294:                    pNode->ChildWnd.hParent      = hwndClient;
                    295:                    pNode->ChildWnd.hThisWnd     = hwndChildWindow;
                    296:                    hHead = (HANDLE)GetWindowLong(hwnd, 0);
                    297:                    pNode->hNext = hHead;
                    298:                    SetWindowLong(hwnd, 0, (LONG) hNode);
                    299: 
                    300:                    iSvrCount++;
                    301: 
                    302: 
                    303:                    LocalUnlock(hNode);
                    304:                } else {
                    305:                            MessageBox(ghwndMain, "Failed to Allocate Node!", "Error", MB_OK);
                    306:                }
                    307:                return 0L;
                    308:            }
                    309: 
                    310:            case MM_CLIENT: {
                    311:                HANDLE hNode, hHead;
                    312:                PNODE  pNode;
                    313:                 MDICREATESTRUCT mdicreate;
                    314: 
                    315:                hNode = LocalAlloc(LHND, (WORD) sizeof(NODE));
                    316:                if (hNode) {
                    317:                    if ((pNode = (PNODE)LocalLock(hNode))==NULL)
                    318:                        MessageBox(ghwndMain, "Failed in LocalLock, hNode!", "Error", MB_OK);
                    319: 
                    320:                    wsprintf((LPSTR) &(pNode->ChildWnd.CaptionBarText),
                    321:                             "Client %d", iCltCount);
                    322: 
                    323:                    mdicreate.szClass = "ClientClass";
                    324:                    mdicreate.szTitle = (LPSTR) &(pNode->ChildWnd.CaptionBarText);
                    325:                    mdicreate.hOwner  = ghModule;
                    326:                    mdicreate.x       =
                    327:                    mdicreate.y       =
                    328:                    mdicreate.cx      =
                    329:                    mdicreate.cy      = CW_USEDEFAULT;
                    330:                    mdicreate.style   = 0l;
                    331:                    mdicreate.lParam  = 0L;
                    332: 
                    333:                    /*Create Child Window*/
                    334:                    hwndChildWindow =
                    335:                        (HANDLE) SendMessage(hwndClient, WM_MDICREATE,
                    336:                                    0L,
                    337:                                    (LONG)(LPMDICREATESTRUCT)&mdicreate);
                    338: 
                    339:                    if (hwndChildWindow == NULL) {
                    340:                        MessageBox(ghwndMain, "Failed in Creating Child Window!", "Error", MB_OK);
                    341:                        return 0L;
                    342:                    }
                    343: 
                    344:                    pNode->ChildWnd.hParent      = hwndClient;
                    345:                    pNode->ChildWnd.hThisWnd     = hwndChildWindow;
                    346:                    hHead = (HANDLE)GetWindowLong(hwnd, 0);
                    347:                    pNode->hNext = hHead;
                    348:                    SetWindowLong(hwnd, 0, (LONG) hNode);
                    349: 
                    350:                    iCltCount++;
                    351: 
                    352:                    LocalUnlock(hNode);
                    353: 
                    354:                } else {
                    355:                            MessageBox(ghwndMain, "Failed to Allocate Node!", "Error", MB_OK);
                    356:                }
                    357:                return 0L;
                    358:            }
                    359: 
                    360:            case MM_ABOUT:
1.1.1.2 ! root      361:                if (DialogBox(ghModule, "AboutBox", ghwndMain, (DLGPROC)About) == -1)
1.1       root      362:                        MessageBox(ghwndMain, "DEMO: About Dialog Creation Error!", "Error", MB_OK);
                    363:                return 0L;
                    364: 
                    365:            case MM_OPT_1:
                    366:            case MM_OPT_2:
                    367:            case MM_OPT_3:
                    368:            case MM_OPT_4:
                    369:            case MM_OPT_5:
                    370:            case MM_OPT_6:
                    371:            case MM_OPT_7:
                    372:            case MM_OPT_8: {
                    373:                HWND hActiveChild;
                    374: 
                    375:                hActiveChild = (HANDLE) SendMessage(hwndClient, WM_MDIGETACTIVE, 0L, 0L);
                    376:                if (hActiveChild)
                    377:                    SendMessage(hActiveChild, WM_COMMAND, wParam, lParam);
                    378:                return 0L;
                    379:            }
                    380: 
                    381:            default:
                    382:                return DefFrameProc(hwnd,  hwndClient, message, wParam, lParam);
                    383:         }
                    384: 
                    385:     default:
                    386: 
                    387:        return DefFrameProc(hwnd,  hwndClient, message, wParam, lParam);
                    388:     }
                    389: }
                    390: 
                    391: /********************************************************************\
                    392: * ServerWndProc
                    393: *
                    394: * History:
                    395: * 04-17-91 ScottLu      Created.
                    396: * 09-09-91 PetrusW     Rewrote.
                    397: \***************************************************************************/
                    398: 
                    399: long ServerWndProc(
                    400:     HWND hwnd,
                    401:     UINT message,
                    402:     DWORD wParam,
                    403:     LONG lParam)
                    404: {
                    405:     static HANDLE MapFileHandle = NULL;
                    406:     static HANDLE hMem1        = NULL;
                    407:     static LPVOID pShrMem1     = NULL;
                    408:     static HANDLE hEdit;
                    409:     static BOOL   bDirty       = FALSE;
                    410:     static HWND          hTextWnd;
                    411: 
                    412:     switch (message) {
                    413:        case WM_COMMAND: {
                    414: 
                    415:          switch (LOWORD(wParam)) {
                    416:            case MM_OPT_1: { //Create File
                    417: 
                    418:                    SetWindowText(hTextWnd, "Creating Map File");
1.1.1.2 ! root      419:                    switch (DialogBox(ghModule, "FileType", hwnd, (DLGPROC)FileType)) {
1.1       root      420:                        case -1:
                    421:                            MessageBox(ghwndMain, "Server: File dialog box creation failed!", "Error", MB_OK);
                    422:                            SetWindowText(hTextWnd, "File dialog box creation failed");
                    423:                            break;
                    424:                        case IDBTN_MAP:
                    425:                            if ((MapFileHandle = (HANDLE) CreateMapFile(gszFile)) == (HANDLE)NULL) {
                    426:                               MessageBox(ghwndMain, "Server: CreateMapFile() failed!", "Error", MB_OK);
                    427:                               SetWindowText(hTextWnd, "Map File creation failed");
                    428:                            }
                    429:                            else {
                    430:                               SetWindowText(hTextWnd, "Select 'Create File Mapping...'");
                    431:                            }
                    432:                            break;
                    433:                        default:
                    434:                            MapFileHandle = (HANDLE) 0xFFFFFFFF;
                    435:                            EnableMenuItem(hServerMenu, MM_OPT_2, MF_ENABLED);
                    436:                            break;
                    437:                    }
                    438:                    return 0L;
                    439:                }
                    440:            case MM_OPT_2: { //Create File Mapping
                    441: 
                    442:                    SetWindowText(hTextWnd, "Creating File Mapping");
                    443:                    if (MapFileHandle != NULL ) {
1.1.1.2 ! root      444:                        switch (DialogBox(ghModule, "MapName", hwnd, (DLGPROC)MapFileName)) {
1.1       root      445:                            case -1:
                    446:                                MessageBox(ghwndMain, "Server: Map dialog box creation failed!", "Error", MB_OK);
                    447:                                SetWindowText(hTextWnd, "Map dialog box creation failed");
                    448:                                break;
                    449:                            case IDBTN_OK:
                    450:                                if ((hMem1 = (HANDLE) CreateMap((HANDLE *) &MapFileHandle, gszMapName) ) == (HANDLE)NULL) {
                    451:                                    MessageBox(ghwndMain, "Server: CreateMap() failed!", "Error", MB_OK);
                    452:                                    SetWindowText(hTextWnd, "File Mapping creation failed");
                    453:                                }
                    454:                                else {
                    455:                                    EnableMenuItem(hServerMenu, MM_OPT_3, MF_ENABLED);
                    456:                                    SetWindowText(hTextWnd, "Select 'Map View of File'");
                    457:                                }
                    458:                                break;
                    459:                            default:
                    460:                                break;
                    461:                        }
                    462:                    } else {
                    463:                            MessageBox(ghwndMain, "Server: MapFileHandle is NULL!", "Error", MB_OK);
                    464:                            SetWindowText(hTextWnd, "Advice: Create server file first");
                    465:                           }
                    466:                return 0L;
                    467:                }
                    468:            case MM_OPT_3: { //Map View of File
                    469:                    SetWindowText(hTextWnd, "Mapping view of File");
                    470:                    if (hMem1) {
                    471:                        if ((pShrMem1 = (LPVOID)MapView(&hMem1)) == (LPVOID)NULL) {
                    472:                            MessageBox(ghwndMain, "Server: MapView() failed!", "Error", MB_OK);
                    473:                            SetWindowText(hTextWnd, "Map view of File failed");
                    474:                        }
                    475:                        else {
                    476:                            EnableMenuItem(hServerMenu, MM_OPT_4, MF_ENABLED);
                    477:                            SetWindowText(hTextWnd, "Select 'Access' to enter text");
                    478:                        }
                    479:                    } else {
                    480:                            MessageBox(ghwndMain, "Server: Mapping view of File Failed!", "Error", MB_OK);
                    481:                            SetWindowText(hTextWnd, "Advice: Create File Mapping First");
                    482:                           }
                    483:                return 0L;
                    484:                }
                    485:            case MM_OPT_4: { //Access
                    486:                    RECT    rcl;
                    487: 
                    488:                    SetWindowText(hTextWnd, "Accessing Server for writing");
                    489: 
                    490:                    if (pShrMem1) {
                    491:                        GetClientRect(hwnd, &rcl);
                    492:                        hEdit = CreateWindow("edit", (LPSTR) NULL,
                    493:                                      WS_CHILD      | WS_VISIBLE     | WS_HSCROLL |
                    494:                                      WS_VSCROLL    | WS_BORDER      | ES_LEFT |
                    495:                                      ES_MULTILINE  | ES_AUTOHSCROLL |
                    496:                                      ES_AUTOVSCROLL,
                    497:                                      0,0, rcl.right-rcl.left,
                    498:                                      rcl.bottom-rcl.top-GetWindowLong(hTextWnd, GWL_USERDATA),
                    499:                                      hwnd, (HMENU)1, ghModule, (LPVOID)NULL);
                    500:                        if (hEdit) {
                    501:                            SetFocus(hEdit);
                    502:                        } else {
                    503:                            MessageBox(ghwndMain, "Server: Create MLE failed!", "Error", MB_OK);
                    504:                            SetWindowText(hTextWnd, "Failed to create MLE");
                    505:                        }
                    506:                    } else {
                    507:                            MessageBox(ghwndMain, "Server: Accessing for writing Failed!", "Error", MB_OK);
                    508:                            SetWindowText(hTextWnd, "Advice: Map view of File First");
                    509:                           }
                    510: 
                    511:                return 0L;
                    512:                }
                    513: 
                    514:          }
                    515: 
                    516:          switch (HIWORD(wParam)) {
                    517:            case EN_UPDATE: {
                    518:                if ((hEdit != NULL) && (hEdit == (HANDLE)lParam) ) {
                    519:                    bDirty = TRUE;
                    520:                }
                    521:                return 0L;
                    522:                }
                    523:          }
                    524: 
                    525:        }
                    526:        case WM_TIMER:
                    527:            if (bDirty && hEdit) {
                    528:                HANDLE hBuf;
                    529:                BYTE * pBuf;
                    530: 
                    531:                hBuf = (HANDLE) SendMessage(hEdit, EM_GETHANDLE, 0L, 0L);
                    532:                if (hBuf) {
                    533:                    if ((pBuf = (BYTE *)LocalLock(hBuf)) == NULL) {
                    534:                        MessageBox(ghwndMain, "Can't get at Edit Control's data!", "Error", MB_OK);
                    535:                    } else {
                    536:                        strncpy(pShrMem1, pBuf, strlen(pBuf)+1);
                    537:                        bDirty = FALSE;
                    538:                    }
                    539:                    LocalUnlock(hBuf);
                    540:                } else {
                    541:                    MessageBox(ghwndMain, "Failed in SendMessage EM_GETHANDLE!", "Error", MB_OK);
                    542:                }
                    543: 
                    544: 
                    545:            }
                    546:            return 0L;
                    547: 
                    548:        case WM_SETFOCUS:
                    549:            if (hEdit)
                    550:                SetFocus(hEdit);
                    551:            return DefMDIChildProc(hwnd, message, wParam, lParam);
                    552: 
                    553:        case WM_MDIACTIVATE:
                    554:            if ((HWND) lParam == hwnd) {
                    555:                SendMessage(GetParent(hwnd), WM_MDISETMENU,
                    556:                            (DWORD)  hServerMenu,
                    557:                            (LONG)   hServerMenuWindow) ;
                    558:                DrawMenuBar(GetParent(GetParent(hwnd))) ;
                    559:                SetFocus(hEdit);
                    560:            }
                    561:            return 0;
                    562: 
                    563:        case WM_SIZE:
                    564:            if (hEdit)
                    565:                MoveWindow(hEdit, 0, 0,
                    566:                           LOWORD(lParam),
                    567:                           HIWORD(lParam)-GetWindowLong(hTextWnd, GWL_USERDATA),
                    568:                           TRUE);
                    569:            MoveWindow(hTextWnd,
                    570:                       0,
                    571:                       HIWORD(lParam) - GetWindowLong(hTextWnd, GWL_USERDATA),
                    572:                       LOWORD(lParam),
                    573:                       HIWORD(lParam), TRUE);
                    574: 
                    575:            return DefMDIChildProc(hwnd, message, wParam, lParam);
                    576: 
                    577:        case WM_CREATE: {
                    578:            PPERWNDINFO      pWndInfo;
                    579:            PNODE            pHead;
                    580:            HANDLE           hHead, hTmp;
                    581:            RECT             rect;
                    582: 
                    583:            GetClientRect(hwnd, &rect);
                    584:            hTextWnd = CreateWindow("Text", NULL,
                    585:                                    WS_BORDER | SS_LEFT | WS_CHILD | WS_VISIBLE,
                    586:                                    0, 0, 0, 0,
                    587:                                    hwnd,
                    588:                                    (HMENU) 2,
                    589:                                    ghModule,
                    590:                                    NULL);
                    591: 
                    592:            SetWindowText(hTextWnd, "Select 'Create File...'");
                    593: 
                    594:            // now find match
                    595:            hHead = (HANDLE) GetWindowLong(ghwndMain, 0);
                    596:            if (hHead) {
                    597:                if ((pHead = (PNODE)LocalLock(hHead))==NULL)
                    598:                    MessageBox(ghwndMain, "Failed in LocalLock!", "Error", MB_OK);
                    599: 
                    600:                while ((pHead->ChildWnd.hThisWnd != hwnd) &&
                    601:                      (pHead->hNext != NULL)) {
                    602:                   hTmp = hHead;
                    603:                   hHead = pHead->hNext;
                    604:                   LocalUnlock(hTmp);
                    605:                   if ((pHead = (PNODE) LocalLock(hHead))==NULL)
                    606:                        MessageBox(ghwndMain, "Failed in LocalLock!", "Error", MB_OK);
                    607:                }
                    608:                if (pHead->ChildWnd.hThisWnd == hwnd) {
                    609:                    pWndInfo = &pHead->ChildWnd;
                    610:                    goto Wnd_Found;
                    611:                } else {
                    612:                    //MessageBox(ghwndMain, "Trouble - Can't find the node!", "Error", MB_OK);
                    613:                    goto Wnd_Out;
                    614:                }
                    615: 
                    616: Wnd_Found:
                    617:                if (!GetClientRect(pWndInfo->hThisWnd,
                    618:                                   &pWndInfo->rcClient))
                    619:                    MessageBox(ghwndMain, "Failed in GetClientRect!", "Error", MB_OK);
                    620: Wnd_Out:
                    621:                LocalUnlock(hHead);
                    622:                return DefMDIChildProc(hwnd, message, wParam, lParam);
                    623:            } else {
                    624:                        //MessageBox(ghwndMain, "Can't GetWindowLong(ghwndMain,0)!", "Error", MB_OK);
                    625:            }           return DefMDIChildProc(hwnd, message, wParam, lParam);
                    626: 
                    627:        }
                    628: 
                    629:        case WM_CLOSE: {
                    630:            PPERWNDINFO      pWndInfo;
                    631:            PNODE            pHead, pTrail;
                    632:            HANDLE           hHead, hTmp;
                    633: 
                    634:            SendMessage(GetParent(hwnd), WM_MDISETMENU,
                    635:                            (DWORD) hMenu,
                    636:                            (LONG)   hMenuWindow) ;
                    637:            DrawMenuBar(GetParent(GetParent(hwnd))) ;
                    638: 
                    639: 
                    640:            // now find match
                    641:            hHead = (HANDLE) GetWindowLong(ghwndMain, 0);
                    642:            if (hHead) {
                    643:                if ((pHead = (PNODE)LocalLock(hHead))==NULL)
                    644:                    MessageBox(ghwndMain, "Failed in LocalLock!", "Error", MB_OK);
                    645: 
                    646:                pTrail = pHead;
                    647:                while ((pHead->ChildWnd.hThisWnd != hwnd) &&
                    648:                      (pHead->hNext != NULL)) {
                    649:                   hTmp = hHead;
                    650:                   pTrail = pHead;
                    651:                   hHead = pHead->hNext;
                    652:                   LocalUnlock(hTmp);
                    653:                   if ((pHead = (PNODE) LocalLock(hHead))==NULL)
                    654:                        MessageBox(ghwndMain, "Failed in LocalLock!", "Error", MB_OK);
                    655:                }
                    656:                if (pHead->ChildWnd.hThisWnd == hwnd) {
                    657:                    pWndInfo = &pHead->ChildWnd;
                    658:                    goto Wnd_Found1;
                    659:                } else {
                    660:                    //MessageBox(ghwndMain, "Trouble - Can't find the thread node!", "Error", MB_OK);
                    661:                    goto Wnd_Out1;
                    662:                }
                    663: 
                    664: Wnd_Found1:    if (pTrail == pHead)
                    665:                    SetWindowLong(ghwndMain, 0, (LONG) pHead->hNext);
                    666:                else
                    667:                    pTrail->hNext = pHead->hNext;
                    668: 
                    669:                // BUG! The lock count returned is always > 0
                    670:                //if (!LocalUnlock(hHead)) {
                    671:                    LocalFree(hHead);
                    672:                    return DefMDIChildProc(hwnd, message, wParam, lParam);
                    673:                //}
                    674: Wnd_Out1:
                    675:                LocalUnlock(hHead);
                    676:            } else {
                    677:                        //MessageBox(ghwndMain, "Can't GetWindowLong(ghwndMain,0) !", "Error", MB_OK);
                    678:            }
                    679:            return DefMDIChildProc(hwnd, message, wParam, lParam);
                    680: 
                    681:        }
                    682: 
                    683:        case WM_DESTROY:
                    684:            KillTimer(hwnd, 1);
                    685:            return 0L;
                    686: 
                    687:        case WM_PAINT:
                    688:            return DefMDIChildProc(hwnd, message, wParam, lParam);
                    689: 
                    690:        default:
                    691:                return DefMDIChildProc(hwnd, message, wParam, lParam);
                    692:     }
                    693: 
                    694: }
                    695: 
                    696: /********************************************************************\
                    697: * ClientWndProc
                    698: *
                    699: * History:
                    700: * 04-17-91 ScottLu      Created.
                    701: * 09-09-91 PetrusW     Rewrote.
                    702: \***************************************************************************/
                    703: 
                    704: long ClientWndProc(
                    705:     HWND hwnd,
                    706:     UINT message,
                    707:     DWORD wParam,
                    708:     LONG lParam)
                    709: {
                    710:     static HANDLE hMem1    = NULL;
                    711:     static LPVOID pShrMem1 = NULL;
                    712:     static HANDLE hEdit;
                    713:     static HANDLE hTextWnd;
                    714: 
                    715:     switch (message) {
                    716:        case WM_COMMAND: {
                    717: 
                    718:          switch (LOWORD(wParam)) {
                    719:            case MM_OPT_5: { //Open File Mapping
                    720:                    SetWindowText(hTextWnd, "Opening Mapping File");
1.1.1.2 ! root      721:                    switch (DialogBox(ghModule, "MapName", hwnd, (DLGPROC)MapFileName)) {
1.1       root      722:                        case -1:
                    723:                            MessageBox(ghwndMain, "Client: Map dialog box creation failed!", "Error", MB_OK);
                    724:                            break;
                    725:                        case IDBTN_OK:
                    726:                            if ((hMem1 = (HANDLE) OpenMap(gszMapName)) == (HANDLE)NULL) {
                    727:                                MessageBox(ghwndMain, "Client: Open File Mapping failed!", "Error", MB_OK);
                    728:                                SetWindowText(hTextWnd, "Advice: Make sure Map file is created on Server");
                    729:                            } else {
                    730:                                EnableMenuItem(hClientMenu, MM_OPT_6, MF_ENABLED);
                    731:                                SetWindowText(hTextWnd, "Select 'Map View of File'");
                    732:                            }
                    733:                            break;
                    734:                        default:
                    735:                            break;
                    736:                    }
                    737:                return 0L;
                    738:                }
                    739:            case MM_OPT_6: { //Map View of File
                    740:                    SetWindowText(hTextWnd, "Mapping view of File");
                    741:                    if (hMem1) {
                    742:                        if ((pShrMem1 = (LPVOID) MapView(&hMem1)) == (LPVOID)NULL)
                    743:                            MessageBox(ghwndMain, "Client: MapView() failed!", "Error", MB_OK);
                    744:                        else {
                    745:                            EnableMenuItem(hClientMenu, MM_OPT_7, MF_ENABLED);
                    746:                            SetWindowText(hTextWnd, "Select 'Access' for reading Server ");
                    747:                        }
                    748:                    } else {
                    749:                            MessageBox(ghwndMain, "Client: Mapping view of File Failed!", "Error", MB_OK);
                    750:                            SetWindowText(hTextWnd, "Advice: Open File Mapping first");
                    751:                           }
                    752:                return 0L;
                    753:                }
                    754:            case MM_OPT_7: { //Access
                    755:                    RECT    rcl;
                    756: 
                    757:                    SetWindowText(hTextWnd, "Accessing Server for reading");
                    758:                    if (pShrMem1) {
                    759:                        GetClientRect(hwnd, &rcl);
                    760: 
                    761:                        hEdit = CreateWindow("edit", NULL,
                    762:                                      WS_CHILD      | WS_VISIBLE     | WS_HSCROLL |
                    763:                                      WS_VSCROLL    | WS_BORDER      | ES_LEFT |
                    764:                                      ES_MULTILINE  | ES_AUTOHSCROLL | ES_READONLY |
                    765:                                      ES_AUTOVSCROLL,
                    766:                                      0,0, rcl.right-rcl.left,
                    767:                                      rcl.bottom-rcl.top-GetWindowLong(hTextWnd, GWL_USERDATA),
                    768:                                      hwnd, (HMENU) 1, ghModule, NULL);
                    769:                        if (hEdit) {
                    770:                            SetFocus(hEdit);
                    771:                            SendMessage(hEdit, WM_SETTEXT, 0L, (LONG)pShrMem1);
                    772:                            SetTimer(hwnd, 2, 10000, NULL);
                    773:                            EnableMenuItem(hClientMenu, MM_OPT_8, MF_ENABLED);
                    774:                        } else {
                    775:                            MessageBox(ghwndMain, "Client: Create MLE failed!", "Error", MB_OK);
                    776:                        }
                    777:                    } else {
                    778:                            MessageBox(ghwndMain, "Client: Accessing for reading Failed!", "Error", MB_OK);
                    779:                            SetWindowText(hTextWnd, "Advice: Map View of File first");
                    780:                           }
                    781: 
                    782:                return 0L;
                    783:                }
                    784: 
                    785:             case MM_OPT_8: { // refresh now
                    786:                HANDLE hActive;
                    787: 
                    788:                hActive = (HANDLE) SendMessage(GetParent(hwnd), WM_MDIGETACTIVE, 0L, 0L);
                    789:                SendMessage(hEdit, WM_SETTEXT, 0L, (LONG)pShrMem1);
                    790:                SetFocus(hActive);
                    791:                return 0L;
                    792:                }
                    793:          }
                    794:        }
                    795:        case WM_SETFOCUS:
                    796:            if (hEdit)
                    797:                SetFocus(hEdit);
                    798:            return DefMDIChildProc(hwnd, message, wParam, lParam);
                    799: 
                    800:        case WM_TIMER:  {
                    801:            HANDLE hActive;
                    802: 
                    803:            if (hEdit) {
                    804:                hActive = (HANDLE) SendMessage(GetParent(hwnd), WM_MDIGETACTIVE, 0L, 0L);
                    805:                SendMessage(hEdit, WM_SETTEXT, 0L, (LONG)pShrMem1);
                    806:                SetFocus(hActive);
                    807:            }
                    808:            return 0L;
                    809:        }
                    810: 
                    811:        case WM_MDIACTIVATE:
                    812:            if ((HWND) lParam == hwnd) {
                    813:                SendMessage(GetParent(hwnd), WM_MDISETMENU,
                    814:                            (DWORD)  hClientMenu,
                    815:                            (LONG)   hClientMenuWindow) ;
                    816:                DrawMenuBar(GetParent(GetParent(hwnd))) ;
                    817:                SetFocus(hEdit);
                    818:            }
                    819:            return 0;
                    820: 
                    821:        case WM_SIZE:
                    822:            if (hEdit)
                    823:                MoveWindow(hEdit, 0, 0,
                    824:                           LOWORD(lParam),
                    825:                           HIWORD(lParam)-GetWindowLong(hTextWnd, GWL_USERDATA),
                    826:                           TRUE);
                    827:            MoveWindow(hTextWnd,
                    828:                       0,
                    829:                       HIWORD(lParam) - GetWindowLong(hTextWnd, GWL_USERDATA),
                    830:                       LOWORD(lParam),
                    831:                       HIWORD(lParam), TRUE);
                    832:            return DefMDIChildProc(hwnd, message, wParam, lParam);
                    833: 
                    834:        case WM_CREATE: {
                    835:            PPERWNDINFO      pWndInfo;
                    836:            PNODE            pHead;
                    837:            HANDLE           hHead, hTmp;
                    838:            RECT             rect;
                    839: 
                    840:            GetClientRect(hwnd, &rect);
                    841:            hTextWnd = CreateWindow("Text", NULL,
                    842:                                    WS_BORDER | SS_LEFT | WS_CHILD | WS_VISIBLE,
                    843:                                    0, 0, 0, 0,
                    844:                                    hwnd,
                    845:                                    (HMENU) 2,
                    846:                                    ghModule,
                    847:                                    NULL);
                    848: 
                    849:            SetWindowText(hTextWnd, "Select 'Open File...'");
                    850: 
                    851:            // now find match
                    852:            hHead = (HANDLE) GetWindowLong(ghwndMain, 0);
                    853:            if (hHead) {
                    854:                if ((pHead = (PNODE)LocalLock(hHead))==NULL)
                    855:                    MessageBox(ghwndMain, "Failed in LocalLock!", "Error", MB_OK);
                    856: 
                    857:                while ((pHead->ChildWnd.hThisWnd != hwnd) &&
                    858:                      (pHead->hNext != NULL)) {
                    859:                   hTmp = hHead;
                    860:                   hHead = pHead->hNext;
                    861:                   LocalUnlock(hTmp);
                    862:                   if ((pHead = (PNODE) LocalLock(hHead))==NULL)
                    863:                        MessageBox(ghwndMain, "Failed in LocalLock!", "Error", MB_OK);
                    864:                }
                    865:                if (pHead->ChildWnd.hThisWnd == hwnd) {
                    866:                    pWndInfo = &pHead->ChildWnd;
                    867:                    goto Wnd_Found;
                    868:                } else {
                    869:                    //MessageBox(ghwndMain, "Trouble - Can't find the node!", "Error", MB_OK);
                    870:                    goto Wnd_Out;
                    871:                }
                    872: 
                    873: Wnd_Found:
                    874:                if (!GetClientRect(pWndInfo->hThisWnd,
                    875:                                   &pWndInfo->rcClient))
                    876:                    MessageBox(ghwndMain, "Failed in GetClientRect!", "Error", MB_OK);
                    877: Wnd_Out:
                    878:                LocalUnlock(hHead);
                    879:                return DefMDIChildProc(hwnd, message, wParam, lParam);
                    880:            } else {
                    881:                        //MessageBox(ghwndMain, "Can't GetWindowLong(ghwndMain,0) !", "Error", MB_OK);
                    882:            }           return DefMDIChildProc(hwnd, message, wParam, lParam);
                    883: 
                    884:        }
                    885: 
                    886:        case WM_CLOSE: {
                    887:            PPERWNDINFO      pWndInfo;
                    888:            PNODE            pHead, pTrail;
                    889:            HANDLE           hHead, hTmp;
                    890: 
                    891:            SendMessage(GetParent(hwnd), WM_MDISETMENU,
                    892:                            (DWORD) hMenu,
                    893:                            (LONG)   hMenuWindow) ;
                    894:            DrawMenuBar(GetParent(GetParent(hwnd))) ;
                    895: 
                    896: 
                    897:            // now find match
                    898:            hHead = (HANDLE) GetWindowLong(ghwndMain, 0);
                    899:            if (hHead) {
                    900:                if ((pHead = (PNODE)LocalLock(hHead))==NULL)
                    901:                    MessageBox(ghwndMain, "Failed in LocalLock!", "Error", MB_OK);
                    902: 
                    903:                pTrail = pHead;
                    904:                while ((pHead->ChildWnd.hThisWnd != hwnd) &&
                    905:                      (pHead->hNext != NULL)) {
                    906:                   hTmp = hHead;
                    907:                   pTrail = pHead;
                    908:                   hHead = pHead->hNext;
                    909:                   LocalUnlock(hTmp);
                    910:                   if ((pHead = (PNODE) LocalLock(hHead))==NULL)
                    911:                        MessageBox(ghwndMain, "Failed in LocalLock!", "Error", MB_OK);
                    912:                }
                    913:                if (pHead->ChildWnd.hThisWnd == hwnd) {
                    914:                    pWndInfo = &pHead->ChildWnd;
                    915:                    goto Wnd_Found1;
                    916:                } else {
                    917:                    //MessageBox(ghwndMain, "Trouble - Can't find the thread node!", "Error", MB_OK);
                    918:                    goto Wnd_Out1;
                    919:                }
                    920: 
                    921: Wnd_Found1:    if (pTrail == pHead)
                    922:                    SetWindowLong(ghwndMain, 0, (LONG) pHead->hNext);
                    923:                else
                    924:                    pTrail->hNext = pHead->hNext;
                    925: 
                    926:                // BUG! The lock count returned is always > 0
                    927:                //if (!LocalUnlock(hHead)) {
                    928:                    LocalFree(hHead);
                    929:                    return DefMDIChildProc(hwnd, message, wParam, lParam);
                    930:                //}
                    931: Wnd_Out1:
                    932:                LocalUnlock(hHead);
                    933:            } else {
                    934:                        //MessageBox(ghwndMain, "Can't GetWindowLong(ghwndMain,0)!", "Error", MB_OK);
                    935:            }
                    936:            return DefMDIChildProc(hwnd, message, wParam, lParam);
                    937: 
                    938:        }
                    939: 
                    940:        case WM_DESTROY:
                    941:            KillTimer(hwnd, 2);
                    942:            return 0l;
                    943: 
                    944:        default:
                    945:                return DefMDIChildProc(hwnd, message, wParam, lParam);
                    946:     }
                    947: 
                    948: }
                    949: 
                    950: /***************************************************************************\
                    951: * About
                    952: *
                    953: * About dialog proc.
                    954: *
                    955: * History:
                    956: * 04-13-91 ScottLu      Created.
                    957: * 09-09-91 PetrusW     Rewrote.
                    958: \***************************************************************************/
                    959: 
                    960: long About(
                    961:     HWND hDlg,
                    962:     UINT message,
                    963:     DWORD wParam,
                    964:     LONG lParam)
                    965: {
                    966:     switch (message) {
                    967:     case WM_INITDIALOG:
                    968:         return TRUE;
                    969: 
                    970:     case WM_COMMAND:
                    971:         if (wParam == IDOK)
                    972:             EndDialog(hDlg, wParam);
                    973:         break;
                    974:     }
                    975: 
                    976:     return FALSE;
                    977: 
                    978:     UNREFERENCED_PARAMETER(lParam);
                    979:     UNREFERENCED_PARAMETER(hDlg);
                    980: }
                    981: 
                    982: /***************************************************************************\
                    983: * MapFileName
                    984: *
                    985: * MapFileName dialog proc.
                    986: *
                    987: * History:
                    988: * 09-09-91 PetrusW     Created.
                    989: \***************************************************************************/
                    990: 
                    991: long MapFileName(
                    992:     HWND hDlg,
                    993:     UINT message,
                    994:     DWORD wParam,
                    995:     LONG lParam)
                    996: {
                    997: 
                    998:     switch (message) {
                    999:     case WM_INITDIALOG:
                   1000:         return TRUE;
                   1001: 
                   1002:     case WM_COMMAND:
                   1003:        switch (wParam) {
                   1004:            case IDBTN_OK: {
                   1005: 
                   1006:                if ((GetDlgItemText(hDlg, IDEDIT_MAPNAME, gszMapName, 20)) == 0) {
                   1007:                        MessageBox(ghwndMain, "MapFileName: Can't get edit text!", "Error", MB_OK);
                   1008:                        strncpy(gszMapName, "MapName1", 10);        // default name
                   1009:                }
                   1010:                EndDialog(hDlg, IDBTN_OK);
                   1011:                break;
                   1012:            }
                   1013: 
                   1014:        }
                   1015: 
                   1016:     }
                   1017: 
                   1018:     return FALSE;
                   1019: 
                   1020:     UNREFERENCED_PARAMETER(lParam);
                   1021:     UNREFERENCED_PARAMETER(hDlg);
                   1022: }
                   1023: 
                   1024: /***************************************************************************\
                   1025: * FileType
                   1026: *
                   1027: * FileType dialog proc.
                   1028: *
                   1029: * History:
                   1030: * 09-09-91 PetrusW     Created.
                   1031: \***************************************************************************/
                   1032: 
                   1033: long FileType(
                   1034:     HWND hDlg,
                   1035:     UINT message,
                   1036:     DWORD wParam,
                   1037:     LONG lParam)
                   1038: {
                   1039: 
                   1040:     switch (message) {
                   1041:     case WM_INITDIALOG:
                   1042:         return TRUE;
                   1043: 
                   1044:     case WM_COMMAND:
                   1045:        switch (wParam) {
                   1046:            case IDBTN_PAGE: {
                   1047:                EndDialog(hDlg, IDBTN_PAGE);
                   1048:                break;
                   1049:            }
                   1050: 
                   1051:            case IDBTN_MAP: {
                   1052:                  if ((GetDlgItemText(hDlg, IDEDIT_MAPFILE, gszFile, 20)) == 0)
                   1053:                      EndDialog(hDlg, IDBTN_PAGE);  // default to use PAGE file
                   1054:                  else
                   1055:                      EndDialog(hDlg, IDBTN_MAP);
                   1056: 
                   1057:                  break;
                   1058:            }
                   1059:        }
                   1060: 
                   1061:     }
                   1062: 
                   1063:     return FALSE;
                   1064: 
                   1065:     UNREFERENCED_PARAMETER(lParam);
                   1066:     UNREFERENCED_PARAMETER(hDlg);
                   1067: }
                   1068: 
                   1069: 
                   1070: /*************************************************************************
                   1071: *
                   1072: * TextWndProc
                   1073: *
                   1074: * Text Window proc.
                   1075: *
                   1076: * History:
                   1077: * 10-07-91  PetrusW    Created.
                   1078: *
                   1079: \***************************************************************************/
                   1080: 
                   1081: LONG TextWndProc (HWND hwnd, UINT message, DWORD wParam, LONG lParam)
                   1082: {
                   1083:     static HFONT hFont = (HFONT) NULL;
                   1084: 
                   1085:     switch (message)
                   1086:     {
                   1087:     case WM_CREATE:
                   1088:         {
                   1089:            LOGFONT    lf;
                   1090:            HDC        hDC;
                   1091:            HFONT      hOldFont;
                   1092:             TEXTMETRIC tm;
                   1093:            RECT       rect;
                   1094:            LONG       lHeight;
                   1095: 
1.1.1.2 ! root     1096:            SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lf), &lf, FALSE);
1.1       root     1097: 
                   1098:            hDC = GetDC(hwnd);
                   1099:            // this is the height for 8 point size font in pixels
                   1100:            lf.lfHeight = 8 * GetDeviceCaps(hDC, LOGPIXELSY) / 72;
                   1101: 
                   1102:            hFont = CreateFontIndirect(&lf);
                   1103:            hOldFont = SelectObject(hDC, hFont);
                   1104:            GetTextMetrics(hDC, &tm);
                   1105:            GetClientRect(GetParent(hwnd), &rect);
                   1106: 
                   1107:            // base the height of the window on size of text
                   1108:            lHeight = tm.tmHeight+6*GetSystemMetrics(SM_CYBORDER)+2;
                   1109:            // saved the height for later reference
                   1110:            SetWindowLong(hwnd, GWL_USERDATA, lHeight);
                   1111:            SetWindowPos(hwnd, NULL,
                   1112:                    0,
                   1113:                    rect.bottom-lHeight,
                   1114:                    rect.right-rect.left,
                   1115:                    lHeight,
                   1116:                    SWP_NOZORDER | SWP_NOMOVE);
                   1117: 
                   1118:             ReleaseDC(hwnd, hDC);
                   1119:             break;
                   1120:         }
                   1121: 
                   1122:     case WM_DESTROY:
                   1123:            if (hFont)
                   1124:                DeleteObject(hFont);
                   1125:            break;
                   1126: 
                   1127:     case WM_SETTEXT:
                   1128:         DefWindowProc(hwnd, message, wParam, lParam);
                   1129:         InvalidateRect(hwnd,NULL,FALSE);
                   1130:         UpdateWindow(hwnd);
                   1131:         return 0L;
                   1132: 
                   1133:     case WM_PAINT:
                   1134:         {
                   1135:             PAINTSTRUCT ps;
                   1136:             RECT   rc;
                   1137:             char   ach[128];
                   1138:             int    len, nxBorder, nyBorder;
                   1139:             HFONT  hOldFont = NULL;
                   1140: 
                   1141:             BeginPaint(hwnd, &ps);
                   1142: 
                   1143:             GetClientRect(hwnd,&rc);
                   1144: 
                   1145:             nxBorder = GetSystemMetrics(SM_CXBORDER);
                   1146:            rc.left  += 9*nxBorder;
                   1147:             rc.right -= 9*nxBorder;
                   1148: 
                   1149:             nyBorder = GetSystemMetrics(SM_CYBORDER);
                   1150:            rc.top    += 3*nyBorder;
                   1151:            rc.bottom -= 3*nyBorder;
                   1152: 
                   1153:            // 3D Text
                   1154:             len = GetWindowText(hwnd, ach, sizeof(ach));
                   1155:            SetBkColor(ps.hdc, GetSysColor(COLOR_BTNFACE));
                   1156: 
                   1157:            SetBkMode(ps.hdc, TRANSPARENT);
                   1158:            SetTextColor(ps.hdc, RGB(64,96,96));
                   1159:            if (hFont)
                   1160:                hOldFont = SelectObject(ps.hdc, hFont);
                   1161:            ExtTextOut(ps.hdc, rc.left+2*nxBorder+2, rc.top+2, ETO_OPAQUE | ETO_CLIPPED,
                   1162:                        &rc, ach, len, NULL);
                   1163: 
                   1164:            SetTextColor(ps.hdc, RGB(128,128,128));
                   1165:            if (hFont)
                   1166:                hOldFont = SelectObject(ps.hdc, hFont);
                   1167:            ExtTextOut(ps.hdc, rc.left+2*nxBorder+1, rc.top+1, ETO_CLIPPED,
                   1168:                        &rc, ach, len, NULL);
                   1169: 
                   1170:            SetTextColor(ps.hdc, RGB(255,255,255));
                   1171:            if (hFont)
                   1172:                hOldFont = SelectObject(ps.hdc, hFont);
                   1173:            ExtTextOut(ps.hdc, rc.left+2*nxBorder, rc.top, ETO_CLIPPED,
                   1174:                        &rc, ach, len, NULL);
                   1175: 
                   1176:            SetBkMode(ps.hdc, OPAQUE);
                   1177: 
                   1178:            if (hOldFont)
                   1179:                SelectObject(ps.hdc, hOldFont);
                   1180: 
                   1181:             EndPaint(hwnd, &ps);
                   1182:             return 0L;
                   1183:         }
                   1184:     }
                   1185:     return DefWindowProc(hwnd, message, wParam, lParam);
                   1186: }

unix.superglobalmegacorp.com

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