Annotation of pmsdk/samples/clipbd/clipshow.c, revision 1.1.1.1

1.1       root        1: /*--------------------- file identification ------------------------*/
                      2: 
                      3: /*
                      4:         clipshow.c
                      5: 
                      6:         SHOWS THE CURRENT CONTENTS OF THE CLIPBOARD
                      7: 
                      8:         Created by Microsoft Corp., 1988
                      9:         
                     10: 
                     11:                SEE  ALSO:
                     12: 
                     13:             the program clipput.exe will put some text on the
                     14:             clipboard when its Copy menu item is chosen.
                     15: 
                     16: 
                     17: */
                     18: 
                     19: 
                     20: /*---------------------- include files -----------------------------*/
                     21: #define INCL_PM
                     22: #define INCL_DOS
                     23: #include <os2.h>
                     24: #include "clipshow.h"
                     25: 
                     26: 
                     27: /*------------------------------ main ------------------------------*/
                     28: 
                     29: BOOL    main() 
                     30: 
                     31:         {
                     32: /*
                     33:  * local constants
                     34:  */
                     35:         #define USE_DEF_QUEUE_SIZE 0
                     36: 
                     37: /*
                     38:  * local variables
                     39:  */
                     40:         QMSG qmsg;
                     41: 
                     42: /*
                     43:  * initialize this application thread's use of the PM
                     44:  */
                     45:         habTheAnchorBlock = WinInitialize (NULL) ;
                     46:        
                     47: /*
                     48:  * create a message queue for this application thread
                     49:  */
                     50:         hmqTheMessageQueue = WinCreateMsgQueue
                     51:                                 (habTheAnchorBlock, USE_DEF_QUEUE_SIZE) ;
                     52:  /*
                     53:   * initialize the application
                     54:   */
                     55:         if (!GenericInit())
                     56:                 return(FALSE);          /* failed loading */
                     57: 
                     58:         hwndOldViewer = WinSetClipbrdViewer(habTheAnchorBlock,hwndClient);
                     59: 
                     60:  /*
                     61:   * run the main event loop
                     62:   */
                     63:         while ( WinGetMsg ( (HAB)NULL, &qmsg, (HWND)NULL, 0, 0 ) )
                     64:                 WinDispatchMsg( (HAB)NULL, &qmsg );
                     65: 
                     66: 
                     67:   /*
                     68:    * kill the window
                     69:    */
                     70:         WinDestroyWindow( hwndFrame );
                     71: 
                     72:   /*
                     73:    * PM cleanup
                     74:    */
                     75:         WinDestroyMsgQueue( hmqTheMessageQueue );
                     76:         WinTerminate( habTheAnchorBlock );
                     77:         }
                     78: 
                     79: 
                     80: /*--------------------- GenericInit -------------------------*/
                     81: BOOL GenericInit() {
                     82: 
                     83:     ULONG   lControlStyle = FCF_TITLEBAR | FCF_SYSMENU |
                     84:                             FCF_SIZEBORDER | FCF_MINMAX;
                     85: 
                     86: 
                     87:     if (!WinRegisterClass( habTheAnchorBlock,
                     88:             szClassName,
                     89:             (PFNWP)GenericWndProc,
                     90:             CS_SIZEREDRAW,
                     91:             0 ))
                     92:         return( FALSE );
                     93: 
                     94:     hwndFrame = WinCreateStdWindow( HWND_DESKTOP,
                     95:         0L,
                     96:         &lControlStyle,
                     97:         szClassName,
                     98:         szClassName,
                     99:         0L,
                    100:         NULL,
                    101:         0,
                    102:         &hwndClient);
                    103: 
                    104:     WinSetWindowPos(hwndFrame,          /* window */
                    105:                     HWND_TOP,           /* window behind */
                    106:                     50,                 /* x pos */
                    107:                     50,                 /* y pos */
                    108:                     200,                /* x size */
                    109:                     200,                /* y size */
                    110:                     SWP_ACTIVATE|SWP_SIZE|SWP_MOVE|SWP_SHOW);   /* flags */
                    111: 
                    112: 
                    113: 
                    114:     if (!hwndFrame)
                    115:         return(FALSE);
                    116:    
                    117:     return(TRUE);
                    118: }
                    119: 
                    120: /*---------------- the main window procedure --------------------------*/
                    121: MRESULT FAR PASCAL GenericWndProc( hwnd, usMessage, mp1, mp2 )
                    122: HWND   hwnd;
                    123: USHORT usMessage;
                    124: MPARAM  mp1;
                    125: MPARAM  mp2;
                    126: {
                    127:     HPS     hps;
                    128:     RECTL    rect;
                    129:     HBITMAP  hbitmap;
                    130:     ULONG  hText;
                    131:     PSZ     pszText;
                    132:     POINTL   ptlDest;
                    133: 
                    134:     switch (usMessage) {
                    135:         case WM_PAINT:
                    136:             hps = WinBeginPaint(hwnd,NULL,&rect);
                    137:             WinFillRect(hps,&rect,CLR_WHITE);
                    138:             WinSendMsg(hwnd,WM_DRAWCLIPBOARD,(MPARAM)0L,(MPARAM)0L);
                    139:             WinEndPaint(hps);
                    140:             return 0L;
                    141: 
                    142:         case WM_DRAWCLIPBOARD:
                    143: 
                    144:             if (! WinOpenClipbrd(habTheAnchorBlock))
                    145:                 return 0L;
                    146: 
                    147:             if (hText = WinQueryClipbrdData(habTheAnchorBlock,CF_TEXT))
                    148:                 {
                    149:                 pszText = MAKEP((SEL)hText,0);
                    150: 
                    151:                 hps = WinGetPS(hwnd);
                    152:                 WinQueryWindowRect(hwnd,&rect);
                    153:                 WinDrawText(hps,
                    154:                             0xFFFF,    /* NULL teminated string */
                    155:                             pszText,      /* the string ??        */
                    156:                             &rect,       /* where to put it      */
                    157:                             CLR_BLACK,  /* foreground           */
                    158:                             CLR_WHITE,   /* background           */
                    159:                             DT_CENTER | DT_VCENTER | DT_ERASERECT);
                    160:                 WinValidateRect(hwnd,(PRECTL)NULL,FALSE);
                    161:                 WinReleasePS(hps);
                    162:                 WinCloseClipbrd(habTheAnchorBlock);
                    163:                 return 0L;
                    164:                 }
                    165:             if (hbitmap = WinQueryClipbrdData(habTheAnchorBlock,CF_BITMAP))
                    166:                 {
                    167:                 hps = WinGetPS(hwnd);
                    168:                 ptlDest.x = ptlDest.y = 0;
                    169:                 WinDrawBitmap(hps,
                    170:                               hbitmap,
                    171:                               (PRECTL)NULL,    /* draw entire bitmap */
                    172:                               &ptlDest,        /* where to put it in dest */
                    173:                               CLR_BLACK,       /* foreground */
                    174:                               CLR_WHITE,       /* background */
                    175:                               DBM_NORMAL);     /* blit flags */
                    176:                 WinValidateRect(hwnd,(PRECTL)NULL,FALSE);
                    177:                 WinReleasePS(hps);
                    178:                 WinCloseClipbrd(habTheAnchorBlock);
                    179:                 return 0L;
                    180:                 }
                    181:             /*
                    182:              * we fall through to here if none of our formats are
                    183:              * available.
                    184:              */
                    185:             WinCloseClipbrd(habTheAnchorBlock);
                    186:             return 0L;
                    187: 
                    188: 
                    189:         default:
                    190:             return( WinDefWindowProc( hwnd, usMessage, mp1, mp2 ) );
                    191:     }
                    192:     return(0L);
                    193: }

unix.superglobalmegacorp.com

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