Annotation of pmsdk/samples/newcard/cfnew.c, revision 1.1

1.1     ! root        1: #define NOCOMM
        !             2: #include "cardfile.h"
        !             3: 
        !             4: 
        !             5: /*********************************************************************/
        !             6: /*  Windows/PM Cardfile Shared Code                                  */
        !             7: /*                                                                   */
        !             8: /*  (c) Copyright Microsoft Corp. 1987,1988 - All Rights Reserved    */
        !             9: /*********************************************************************/
        !            10: 
        !            11: /*********************************************************************/
        !            12: /*    The following shared code was developed from the original      */
        !            13: /* Cardfile application.  This code can be compiled to run under     */
        !            14: /* either the Windows or the PM manager environment.  All            */
        !            15: /* functionality associated with bitmaps or printing has been        */
        !            16: /* deleted.  Some comments refering to these functions may still be  */
        !            17: /* present in the code and should be disregarded. jw.                */
        !            18: /*********************************************************************/
        !            19: 
        !            20: 
        !            21: 
        !            22: /*********************************************************************/
        !            23: /* GetOldData -
        !            24: /*    Gets data from a previous instance.  This routine is only 
        !            25: /* applicable in Windows.
        !            26: /*********************************************************************/
        !            27: 
        !            28: void FAR  GetOldData(hInstance)
        !            29: HINST hInstance;
        !            30:     {
        !            31:     GetInstanceData(hInstance, (PSTR)&hbrWhite, 2);
        !            32:     GetInstanceData(hInstance, (PSTR)&hbrBlack, 2);
        !            33:     GetInstanceData(hInstance, (PSTR)&hbrGray, 2);
        !            34:     GetInstanceData(hInstance, (PSTR)&hbrLine, 2);
        !            35:     GetInstanceData(hInstance, (PSTR)&hbrBack, 2);
        !            36:     GetInstanceData(hInstance, (PSTR)&CharFixHeight, 2);
        !            37:     GetInstanceData(hInstance, (PSTR)&CharFixWidth, 2);
        !            38:     GetInstanceData(hInstance, (PSTR)&ySpacing, 2);
        !            39:     GetInstanceData(hInstance, (PSTR)&CardWidth, 2);
        !            40:     GetInstanceData(hInstance, (PSTR)&CardHeight, 2);
        !            41:     GetInstanceData(hInstance, (PSTR)&hAccel, 2);
        !            42:     }
        !            43: 
        !            44: 
        !            45: /*********************************************************************/
        !            46: /* InitInstance -                                                    */
        !            47: /*    Performs initialization for each instance, i.e., loads         */
        !            48: /* resources, creates windows, ...                                   */
        !            49: /*                                                                   */
        !            50: /* Different in Windows and PM.                                      */
        !            51: /*********************************************************************/
        !            52: 
        !            53: BOOL FAR InitInstance(hInstance, lpszCommandLine, cmdShow)
        !            54: HINST hInstance;
        !            55: LPSTR lpszCommandLine;
        !            56: int cmdShow;
        !            57:     {
        !            58:     int i;
        !            59:     LPCARDHEADER lpCards;
        !            60:     HWND hwnd = NULL;
        !            61:     LPSTR lpchTmp;
        !            62:     PSTR pchTmp;
        !            63:     FARPROC lpCardWndProc;
        !            64:     char buf[3];
        !            65:     RECT rect;
        !            66: #ifndef IN_WINDOWS
        !            67:     ULONG ctlData;
        !            68: #endif
        !            69: 
        !            70:     /* get resident strings */
        !            71:     LoadString(hInstance, IDS_EINSMEMORY, (LPSTR)NotEnoughMem, 50);
        !            72:     LoadString(hInstance, IDS_UNTITLED, (LPSTR)rgchUntitled, 30);
        !            73:     LoadString(hInstance, IDS_CARDDATA, (LPSTR)rgchCardData, 40);
        !            74:     LoadString(hInstance, IDS_STRINGINSERT, (LPSTR)buf, 3);
        !            75:     if (!LoadString(hInstance, IDS_CARDFILE, (LPSTR)rgchCardfile, 40))
        !            76:         goto InitError;
        !            77: 
        !            78:     /* this is used in MergeStrings */
        !            79:     wMerge = *(unsigned *)buf;
        !            80: 
        !            81:     /* make ProcInstances for all dialog procedures, and for the */
        !            82:     /* filter proc for the edit control */
        !            83:     lpDlgProc = MakeProcInstance( DlgProc, hInstance );
        !            84:     lpfnOpen = MakeProcInstance( fnOpen, hInstance );
        !            85:     lpfnSave = MakeProcInstance( fnSave, hInstance );
        !            86:     lpfnAbout = MakeProcInstance( fnAbout, hInstance );
        !            87:     lpCardWndProc = MakeProcInstance( (FARPROC) CardWndProc, hInstance);
        !            88: 
        !            89:     /* unlikely that last one will work but others won't */
        !            90:     if (!lpCardWndProc)
        !            91:         goto InitError;
        !            92: 
        !            93:     /* allocate the basic data structure for storing the card headers */
        !            94:     hCards = GlobalAlloc(GHND, 
        !            95:                          (long)sizeof(CARDHEADER)); /* alloc first card */
        !            96: 
        !            97:     if (!hCards)
        !            98:         goto InitError;
        !            99: 
        !           100:     /* make a single blank card */
        !           101:     CurIFile[0] = 0;        /* file is untitled */
        !           102:     cCards = 1;
        !           103:     CurCardHead.line[0] = 0;
        !           104:     CurCard.hBitmap = 0;
        !           105:     CurCardHead.flags = FNEW;
        !           106:     lpCards = (LPCARDHEADER)GlobalLock(hCards);
        !           107:     *lpCards = CurCardHead;
        !           108:     GlobalUnlock(hCards);
        !           109: 
        !           110:     /* Note: PM mapping for CreateWindow is only */
        !           111:     /*      applicable for the main window */
        !           112: 
        !           113:     /* create the Cardfile window */
        !           114:     hwnd = CreateWindow(
        !           115:               (LPSTR) rgchCardfileClass,
        !           116:               (LPSTR) "",
        !           117:               WS_TILEDWINDOW | WS_HSCROLL | WS_VSCROLL,
        !           118:               0, 0, 0, 100,
        !           119:               NULL, NULL,
        !           120:               hInstance,
        !           121:               (LPSTR)NULL);
        !           122: 
        !           123:     if (!hwnd)
        !           124:        goto InitError;
        !           125: 
        !           126:     /* Since the CreateWindow mapping is only applicable for the main */
        !           127:     /* window, separate compilation must be used. */
        !           128: 
        !           129: #ifdef IN_WINDOWS
        !           130:     /* create the edit control window */
        !           131:     hCardWnd = CreateWindow(
        !           132:                 (LPSTR)"Edit",
        !           133:                 (LPSTR)"",
        !           134:                 WS_CHILD | WS_VISIBLE | ES_MULTILINE,
        !           135:                 0, 0, 0, 0,
        !           136:                 hwnd,
        !           137:                 IDM_EDITWINDOW,
        !           138:                 hInstance,
        !           139:                 (LPSTR)NULL);
        !           140: #else
        !           141:     /* Before creating child, make sure main window is updated. */
        !           142:     WinUpdateWindow( FRAME(hwnd) );
        !           143: 
        !           144:     hCardWnd = WinCreateWindow( hwnd,
        !           145:                                 (PSZ) WC_ENTRYFIELD, 
        !           146:                                 (PSZ) "",
        !           147:                                WS_VISIBLE,
        !           148:                                 0, 0, 0, 0,
        !           149:                                 hwnd,
        !           150:                                 HWND_TOP,
        !           151:                                 IDM_EDITWINDOW,
        !           152:                                 (PSZ) NULL,
        !           153:                                 (PSZ) NULL );
        !           154: 
        !           155:     /* When a window is created, the initial size message has 0, 0 as  */
        !           156:     /*  the size.  Get the real size and call the size routine as if  */
        !           157:     /*  the proper size was sent.  This also positions the Cardfile   */
        !           158:     /*  Edit window in the correct position in the main window        */
        !           159: 
        !           160:     WinQueryWindowRect( FRAME(hwnd), (PRECTL)&rect );
        !           161:     CardfileSize( hwnd, rect.xRight, rect.yTop );
        !           162: 
        !           163:     /* Because the edit control window wasn't created when the main  */
        !           164:     /* window was activated, the main window now has the focus.  Need */
        !           165:     /* to give the focus to the edit window. */
        !           166: 
        !           167:     WinSetFocus( hAB, hCardWnd );
        !           168: #endif    
        !           169: 
        !           170:     if (!hCardWnd)
        !           171:         {
        !           172:         /* some kind of failure */
        !           173: InitError:
        !           174:         MessageBox(hwnd, (LPSTR)NotEnoughMem, (LPSTR)NULL, MB_OK | MB_ICONEXCLAMATION);
        !           175:         return(FALSE);
        !           176:         }
        !           177: 
        !           178:     /* limit the number of characters that can be typed into the */
        !           179:     /* edit control to the number that will fit on a card */
        !           180:     SendMessage(hCardWnd, EM_LIMITTEXT, CARDTEXTSIZE, 0L);
        !           181: 
        !           182:     /* filter the messages going to the edit control */
        !           183:     lpEditWndProc = (FARPROC)GetWindowLong(hCardWnd, GWL_WNDPROC);
        !           184:     SetWindowLong(hCardWnd, GWL_WNDPROC, (LONG)lpCardWndProc);
        !           185: 
        !           186:     SetEditText((LPSTR)"");
        !           187: 
        !           188:     ShowWindow(FRAME(hwnd), cmdShow);
        !           189: 
        !           190:     MakeTmpFile();
        !           191: 
        !           192:     /* if a file was passed as a command line argument, try to read it in */
        !           193:     for (lpchTmp = lpszCommandLine; *lpchTmp == ' '; lpchTmp++)
        !           194:         ;
        !           195:     for (pchTmp = CurIFile, i = 0; i < PATHMAX-1 && (BYTE)*lpchTmp > ' '; ++i)
        !           196:         *pchTmp++ = *lpchTmp++;
        !           197:     *pchTmp = 0;
        !           198:     AnsiUpper((LPSTR)CurIFile);
        !           199: 
        !           200:     if (*CurIFile)
        !           201:         if (!DoOpen(CurIFile))
        !           202:             CurIFile[0] = 0;
        !           203: 
        !           204:     return(TRUE);
        !           205:     }
        !           206: 
        !           207: 
        !           208: /*********************************************************************/
        !           209: /* CardfileInit -                                                    */
        !           210: /*    Performs the one time initialization, such as class            */
        !           211: /* registration.                                                     */
        !           212: /*                                                                   */
        !           213: /*    Different in PM and Windows                                    */
        !           214: /*********************************************************************/
        !           215: 
        !           216: BOOL FAR CardfileInit()
        !           217:     {
        !           218:     PWNDCLASS   pClass;
        !           219:     HANDLE      hIcon;
        !           220:     TEXTMETRIC  Metrics;    /* structure filled with font info */
        !           221:     LOGBRUSH   logBrush;
        !           222:     HDC        hIC;
        !           223: 
        !           224:     /* In the PM version, brushes are treated as longs (the color).  */
        !           225: 
        !           226:     /* initialize the brushes */
        !           227: #ifdef   IN_WINDOWS
        !           228:     hbrWhite    = GetStockObject(WHITE_BRUSH);
        !           229:     hbrBlack    = GetStockObject(BLACK_BRUSH);
        !           230:     hbrGray     = GetStockObject(GRAY_BRUSH);
        !           231:     GetObject(hbrGray, sizeof(LOGBRUSH), (LPSTR)&logBrush);
        !           232:     if (!(hbrGray = CreateBrushIndirect((LPLOGBRUSH)&logBrush)))
        !           233:         hbrGray = hbrWhite;
        !           234: #else
        !           235:     hbrWhite = WHITE_COLOR;
        !           236:     hbrBlack = BLACK_COLOR;
        !           237:     hbrGray = WHITE_COLOR;
        !           238: #endif
        !           239: 
        !           240:     hIC = CreateIC((LPSTR)"DISPLAY", (LPSTR)NULL, (LPSTR)NULL, (LPSTR)NULL);
        !           241:     if (!hIC)
        !           242:         return(FALSE);
        !           243: 
        !           244:     /* For now, set the brushes to be blue and red in PM */
        !           245: 
        !           246:     /* background should be BLUE, and the line should be RED */
        !           247: #ifdef   IN_WINDOWS
        !           248:     if (!(hbrBack = (HBRUSH) CreateSolidBrush( CONVERT_RGB( RGBBLUE ))))
        !           249:         hbrBack = hbrGray;
        !           250:     if (!(hbrLine = (HBRUSH) CreateSolidBrush( CONVERT_RGB( RGBRED ))))
        !           251:         hbrLine = hbrBlack;
        !           252: #else
        !           253:     hbrBack = BLUE_COLOR;
        !           254:     hbrLine = RED_COLOR;
        !           255: #endif
        !           256: 
        !           257: 
        !           258: 
        !           259:     /* Setup the font, and get metrics */
        !           260:     GetTextMetrics(hIC, (LPTEXTMETRIC)(&Metrics));
        !           261: 
        !           262:     DeleteDC(hIC);
        !           263: 
        !           264:     /* In PM, application needs to specify the character height to the */
        !           265:     /* binding system so that subsequent TextOut calls can be remapped to */
        !           266:     /* have the proper y coordinate. */
        !           267:     SET_CHARHEIGHT( (int) Metrics.tmHeight );
        !           268: 
        !           269:     CharFixHeight = (int) (Metrics.tmHeight+Metrics.tmExternalLeading); /* the height */
        !           270:     ExtLeading = (int) Metrics.tmExternalLeading;
        !           271:     CharFixWidth = (int) Metrics.tmAveCharWidth;   /* the average width */
        !           272:     ySpacing = CharFixHeight+1;
        !           273: 
        !           274:     CardWidth = (LINELENGTH * CharFixWidth) + 3;
        !           275:     CardHeight = (CARDLINES*CharFixHeight) + CharFixHeight + 1 + 2 + 2;
        !           276: 
        !           277:     /* Get the resource file info, such as icons, and accelerator tables */
        !           278:     /* Register the class */
        !           279: 
        !           280: #ifdef   IN_WINDOWS
        !           281:     hIcon  = LoadIcon(hCardfileInstance,(LPSTR)CFICON);
        !           282:     hAccel = LoadAccelerators(hCardfileInstance, (LPSTR)CFACCEL);
        !           283: 
        !           284:     /* register the cardfile class */
        !           285:     pClass = (PWNDCLASS) LocalAlloc(LPTR, sizeof(WNDCLASS));
        !           286:     if (!pClass)
        !           287:         return(FALSE);
        !           288:     pClass->lpszClassName = (LPSTR)rgchCardfileClass;
        !           289:     pClass->hCursor       = NULL;         /* normal cursor is arrow */
        !           290:     pClass->hIcon         = hIcon;
        !           291:     pClass->hbrBackground = NULL;
        !           292:     pClass->style         = CS_VREDRAW | CS_DBLCLKS;
        !           293:     pClass->lpfnWndProc   = CardfileWndProc;
        !           294:     pClass->hInstance     = hCardfileInstance;
        !           295:     pClass->lpszMenuName  = (LPSTR)CFMENU;
        !           296:     if (!RegisterClass((LPWNDCLASS) pClass))
        !           297:         return FALSE;
        !           298:     LocalFree((HANDLE)pClass);
        !           299: #else
        !           300:     /* Register the PM class */
        !           301: 
        !           302:     if ( !WinRegisterClass( hAB,
        !           303:                             (PSZ) rgchCardfileClass,
        !           304:                             (PFNWP) CardfileWndProc,
        !           305:                             CS_SIZEREDRAW,
        !           306:                             NULL ) )
        !           307:         return FALSE;
        !           308: #endif
        !           309: 
        !           310: 
        !           311:     return TRUE;
        !           312:     }
        !           313: 

unix.superglobalmegacorp.com

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