Annotation of pmsdk/samples/newcard/cftext.c, revision 1.1.1.1

1.1       root        1: #include "cardfile.h"
                      2: 
                      3: 
                      4: /*********************************************************************/
                      5: /*  Windows/PM Cardfile Shared Code                                  */
                      6: /*                                                                   */
                      7: /*  (c) Copyright Microsoft Corp. 1987,1988 - All Rights Reserved    */
                      8: /*********************************************************************/
                      9: 
                     10: /*********************************************************************/
                     11: /*    The following shared code was developed from the original      */
                     12: /* Cardfile application.  This code can be compiled to run under     */
                     13: /* either the Windows or the PM manager environment.  All            */
                     14: /* functionality associated with bitmaps or printing has been        */
                     15: /* deleted.  Some comments refering to these functions may still be  */
                     16: /* present in the code and should be disregarded. jw.                */
                     17: /*********************************************************************/
                     18: 
                     19: 
                     20: 
                     21: /*********************************************************************/
                     22: /* CardKey -                                                         */
                     23: /*    Handles all virtual keys passed to cardfile in Card mode.      */
                     24: /* Included are PageUp, PageDown, Home, and End.  Each of these keys */
                     25: /* brings a new card to the front.                                   */
                     26: /*                                                                   */
                     27: /* Same in Windows and PM.                                           */
                     28: /*********************************************************************/
                     29: 
                     30: BOOL CardKey(wParam)
                     31: WORD wParam;
                     32:     {
                     33:     switch(wParam)
                     34:         {
                     35:         case VK_HOME:
                     36:             CardfileScroll(hCardfileWnd, SB_THUMBTRACK, 0);
                     37:             goto FinishScroll;
                     38: 
                     39:         case VK_END:
                     40:             CardfileScroll(hCardfileWnd, SB_THUMBTRACK, cCards-1);
                     41:             goto FinishScroll;
                     42: 
                     43:         case VK_PRIOR:
                     44:             CardfileScroll(hCardfileWnd, SB_LINEUP, 0);
                     45:             goto FinishScroll;
                     46: 
                     47:         case VK_NEXT:
                     48:             CardfileScroll(hCardfileWnd, SB_LINEDOWN, 0);
                     49: 
                     50: FinishScroll:
                     51:             CardfileScroll(hCardfileWnd, SB_ENDSCROLL, 0);
                     52:             return(TRUE);
                     53: 
                     54:         default:
                     55:             return(FALSE);
                     56:         }
                     57:     }
                     58: 
                     59: 
                     60: /*********************************************************************/
                     61: /* CardChar -                                                        */
                     62: /*    Looks at chars coming into cardfile and if ctrl-char, searches */
                     63: /* for next card beginning with that letter.  If found, card is      */
                     64: /* brought to top.  If keystroke is processed, returns TRUE,         */
                     65: /* otherwise FALSE.                                                  */
                     66: /*                                                                   */
                     67: /*    Same in Windows and PM.                                        */
                     68: /*********************************************************************/
                     69: 
                     70: BOOL CardChar(ch)
                     71: int ch;
                     72:     {
                     73:     LPCARDHEADER lpCards;
                     74:     LPCARDHEADER lpTmpCard;
                     75:     int i;
                     76:     int iCardTmp;
                     77:     int y;
                     78:     RECT rect;
                     79:     HDC hDC;
                     80:     MSG  msg;
                     81:    
                     82:     /* if character is greater than ' ' */
                     83:     if (ch >= ' ')
                     84:         /* don't want to handle it */
                     85:         return(FALSE);
                     86: 
                     87:     /* find out the letter of the control character */
                     88:     ch += 'A' - 1;
                     89: 
                     90:     /* scan all cards for the character, starting at the front one */
                     91:     lpCards = (LPCARDHEADER) GlobalLock(hCards);
                     92:     iCardTmp = iFirstCard+1;
                     93:     lpTmpCard = lpCards + iCardTmp;
                     94: 
                     95:     for (i = 0; i < cCards; ++i, lpTmpCard++, iCardTmp++)
                     96:         {
                     97:         /* if at end */
                     98:         if (iCardTmp == cCards)
                     99:             {
                    100:             /* go back to beginning */
                    101:             iCardTmp = 0;
                    102:             lpTmpCard = lpCards;
                    103:             }
                    104: 
                    105:         /* case insensitive */
                    106:         if (ANSICHARUP(CHAR_STR(lpTmpCard->line)) == ch)
                    107:             break;
                    108:         }
                    109:     GlobalUnlock(hCards);
                    110:     /* if found one, i will be < cCards */
                    111:     if (i < cCards)
                    112:         {
                    113:         /* if card mode */
                    114:         if (CardPhone != IDM_PHONEBOOK)
                    115:             {
                    116:             /* save current front data */
                    117:             SaveCurrentCard(iFirstCard);
                    118: 
                    119:             /* get new card's data */
                    120:             SetCurCard(iCardTmp);
                    121:             }
                    122:         else
                    123:             {
                    124:             /* if phonebook, just remove selection */
                    125:             y = (iFirstCard - iTopCard) * CharFixHeight;
                    126:             TRANSLATE_COORDS( cyMainWindow );
                    127: 
                    128:             SetRect((LPRECT)&rect, 0, y, (LINELENGTH+2)*CharFixWidth, 
                    129:                     y + CharFixHeight);
                    130:             TRANSLATE_RECT( rect );
                    131:             TRANSLATE_COORDS( 0 );
                    132: 
                    133:             hDC = GetDC(hCardfileWnd);
                    134:             InvertRect(hDC, (LPRECT)&rect);
                    135:             ReleaseDC(hCardfileWnd, hDC);
                    136:             }
                    137:         iFirstCard = iCardTmp;
                    138: 
                    139:         /* if in card mode, repaint headers and redraw */
                    140:         if (CardPhone == IDM_CARDFILE)
                    141:             {
                    142:             SetScrollPos(hCardfileWnd, SB_HORZ, iFirstCard, TRUE);
                    143:             PaintNewHeaders();
                    144:             InvalidateRect(hCardWnd, (LPRECT)NULL, TRUE);
                    145:             }
                    146: 
                    147:         /* otherwise bring new card on screen */
                    148:         else
                    149:             BringCardOnScreen(iFirstCard);  /* will highlight it too */
                    150:         }
                    151:     return(TRUE);
                    152:     }
                    153: 
                    154: 
                    155: /*********************************************************************/
                    156: /* BringCardOnScreen -                                               */
                    157: /*    Called in phonebook mode to bring a particular card into the   */
                    158: /* visible window.                                                   */
                    159: /*                                                                   */
                    160: /* Same in Windows and PM.                                           */
                    161: /*********************************************************************/
                    162: 
                    163: void BringCardOnScreen(iCard)
                    164: int iCard;
                    165:     {
                    166:     int dLines;
                    167:     int cLines;
                    168:     RECT rect;
                    169:     HDC hDC;
                    170:     int y;
                    171: 
                    172:     /* figure out how many lines there are in the window */
                    173:     cLines = cyMainWindow / CharFixHeight;
                    174: 
                    175:     /* put up new highlight in case it's already partly on the screen */
                    176:     TRANSLATE_COORDS( cyMainWindow );
                    177:     y = (iCard - iTopCard) * CharFixHeight;
                    178: 
                    179:     SetRect((LPRECT)&rect, 0, y, (LINELENGTH+2)*CharFixWidth, 
                    180:             y + CharFixHeight);
                    181:     TRANSLATE_RECT( rect );
                    182: 
                    183:     hDC = GetDC(hCardfileWnd);
                    184:     InvertRect(hDC, (LPRECT)&rect);
                    185:     ReleaseDC(hCardfileWnd, hDC);
                    186:     TRANSLATE_COORDS( 0 );
                    187: 
                    188:     /* see if we have to move the list within the window */
                    189:     if (iCard < iTopCard || iCard > iTopCard + cLines - 1)
                    190:         {
                    191:         if (iCard < iTopCard)
                    192:             dLines = (iCard - iTopCard);
                    193:         else
                    194:             dLines = iCard - iTopCard - cLines + 1;
                    195:         iTopCard += dLines;
                    196: 
                    197:         /* reset everything */
                    198:         SetScrollPos(hCardfileWnd, SB_VERT, iTopCard, TRUE);
                    199:         ScrollWindow(hCardfileWnd, 0, -dLines * CharFixHeight, 
                    200:                      (LPRECT)NULL, (LPRECT)NULL);
                    201:         UpdateWindow(hCardfileWnd);
                    202:         }
                    203:     }
                    204: 
                    205: 
                    206: 
                    207: /*********************************************************************/
                    208: /* PhoneKey -                                                        */
                    209: /*    Handles virtual keys in phonebook mode.                        */
                    210: /*                                                                   */
                    211: /* Same in Windows and PM.                                           */
                    212: /*********************************************************************/
                    213: 
                    214: BOOL PhoneKey(hwnd, wParam)
                    215: HWND hwnd;
                    216: WORD wParam;
                    217:     {
                    218:     HDC hDC;
                    219:     RECT rect;
                    220:     int y;
                    221:     int tmpCurCard;
                    222:     int cLines;
                    223: 
                    224:     cLines = cyMainWindow / CharFixHeight;
                    225: 
                    226:     switch(wParam)
                    227:         {
                    228:         case VK_NEXT:
                    229:             tmpCurCard = iFirstCard + cLines;
                    230:             if (tmpCurCard >= cCards)
                    231:                 tmpCurCard = cCards - 1;
                    232:             goto SelectNewObject;
                    233: 
                    234:         case VK_PRIOR:
                    235:             tmpCurCard = iFirstCard - cLines;
                    236:             if (tmpCurCard >= 0)
                    237:                 goto SelectNewObject;
                    238: 
                    239:         case VK_HOME:
                    240:             tmpCurCard = 0;
                    241:             goto SelectNewObject;
                    242: 
                    243:         case VK_END:
                    244:             tmpCurCard = cCards - 1;
                    245:             goto SelectNewObject;
                    246: 
                    247:         case VK_UP:
                    248:             tmpCurCard = iFirstCard - 1;
                    249:             goto SelectNewObject;
                    250: 
                    251:         case VK_DOWN:
                    252:             tmpCurCard = iFirstCard + 1;
                    253: 
                    254: SelectNewObject:
                    255:             if (tmpCurCard >= 0 && tmpCurCard < cCards && tmpCurCard != iFirstCard)
                    256:                 {
                    257:                 TRANSLATE_COORDS( cyMainWindow );
                    258:                 y = (iFirstCard - iTopCard) * CharFixHeight;
                    259:                 SetRect((LPRECT)&rect, 0, y, (LINELENGTH+2)*CharFixWidth, y + CharFixHeight);
                    260:                 TRANSLATE_RECT( rect);
                    261: 
                    262:                 hDC = GetDC(hwnd);
                    263:                 InvertRect(hDC, (LPRECT)&rect);
                    264:                 ReleaseDC(hwnd, hDC);
                    265:                 TRANSLATE_COORDS( 0 );
                    266: 
                    267:                 BringCardOnScreen(iFirstCard = tmpCurCard); /* will highlight the right one */
                    268:                 }
                    269:             return(TRUE);
                    270: 
                    271:         default:
                    272:             return(FALSE);
                    273:         }
                    274:     }
                    275: 

unix.superglobalmegacorp.com

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