Annotation of pmsdk/samples/mdi/app.c, revision 1.1.1.1

1.1       root        1: /***************************************************************************\
                      2: * app.c - MDI Sample application
                      3: *
                      4: * Created by Microsoft Corporation, 1989
                      5: *
                      6: \***************************************************************************/
                      7: 
                      8: #define INCL_WINSYS
                      9: #define INCL_WINCOMMON
                     10: #define INCL_WINMESSAGEMGR
                     11: #define INCL_WINPOINTERS
                     12: #define INCL_WININPUT
                     13: #define INCL_WINMENUS
                     14: #define INCL_WINFRAMEMGR
                     15: #define INCL_WINWINDOWMGR
                     16: #define INCL_WINRECTANGLES
                     17: #define INCL_WINHEAP
                     18: #define INCL_WINSCROLLBARS
                     19: #define INCL_GPIPRIMITIVES
                     20: 
                     21: #include <os2.h>
                     22: #include "app.h"
                     23: #include "appdata.h"
                     24: #include "mdi.h"
                     25: #include "mdidata.h"
                     26: 
                     27: /*
                     28:     Function prototypes
                     29: */
                     30: BOOL AppInit(VOID);
                     31: BOOL MDIInit(VOID);
                     32: VOID AppTerminate(VOID);
                     33: VOID MDITerminate(VOID);
                     34: BOOL AppNewDocument(USHORT, PSZ);
                     35: VOID TrackSplitbars(HWND, USHORT, SHORT, SHORT);
                     36: VOID MDIDesktopSize(HWND, MPARAM, MPARAM);
                     37: VOID MDIDesktopSetFocus(HWND, MPARAM); 
                     38: VOID MDIDesktopActivateDoc(SHORT idMenuitem);
                     39: BOOL AppNewDocument(USHORT, PSZ);
                     40: NPDOC MDINewDocument(USHORT fsStyle, PSZ pszClassName);
                     41: VOID MDISetInitialDocPos(HWND hwndNewFrame);
                     42: 
                     43: int cdecl main(void)
                     44: {
                     45:     QMSG qmsg;
                     46:     /*
                     47:      * Initialize the application globals
                     48:      * and create the main window.
                     49:      */
                     50:     if (AppInit() == FALSE) {
                     51:         WinAlarm(HWND_DESKTOP, WA_ERROR);
                     52:         return(0);
                     53:     }
                     54: 
                     55:     /*
                     56:      * Initialize the MDI globals etc..
                     57:      */
                     58:     if (MDIInit() == FALSE) {
                     59:         WinAlarm(HWND_DESKTOP, WA_ERROR);
                     60:         WinAlarm(HWND_DESKTOP, WA_ERROR);
                     61:         return(0);
                     62:     }
                     63: 
                     64:     /*
                     65:      * Create an initial, untitled document.
                     66:      */
                     67:     AppNewDocument(DS_HORZSPLITBAR | DS_VERTSPLITBAR, szDocClass);
                     68: 
                     69:     while (WinGetMsg(NULL, (PQMSG)&qmsg, NULL, 0, 0)) {
                     70:         WinDispatchMsg(NULL, (PQMSG)&qmsg);
                     71:     }
                     72: 
                     73:     /*
                     74:      * Do the clean-up of the MDI code.
                     75:      */
                     76:     MDITerminate();
                     77: 
                     78:     /*
                     79:      * Do the clean-up of the Application.
                     80:      */
                     81:     AppTerminate();
                     82: 
                     83:     DosExit(EXIT_PROCESS, 0);
                     84: }
                     85: 
                     86: 
                     87: MRESULT CALLBACK MDIWndProc(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
                     88: {
                     89:     HPS hps;
                     90:     RECTL rclPaint, rclWindow;
                     91:     POINTL ptlPatternRef;
                     92: 
                     93:     switch (msg) {
                     94: 
                     95:     case WM_PAINT:
                     96:         hps = WinBeginPaint(hwnd, (HPS)NULL, &rclPaint);
                     97: 
                     98:         /*
                     99:          * Set the pattern to be at the top-left
                    100:          * since we're top-left aligning the bits.
                    101:          */
                    102:         WinQueryWindowRect(hwnd, (PRECTL)&rclWindow);
                    103:         ptlPatternRef.x = rclWindow.xLeft;
                    104:         ptlPatternRef.y = rclWindow.yTop;
                    105:         GpiSetPatternRefPoint(hps, &ptlPatternRef);
                    106: 
                    107:         WinFillRect(hps, &rclPaint, SYSCLR_APPWORKSPACE);
                    108: 
                    109:         WinEndPaint(hps);
                    110:         break;
                    111: 
                    112:     case WM_SIZE:
                    113:         MDIDesktopSize(hwnd, mp1, mp2);
                    114:         break;
                    115: 
                    116:     case WM_SETFOCUS:
                    117:         MDIDesktopSetFocus(hwnd, mp2);
                    118:         break;
                    119: 
                    120:     case WM_COMMAND:
                    121:         switch (SHORT1FROMMP(mp1)) {
                    122: 
                    123:         /*
                    124:          * Pass these accelerators onto the active document's
                    125:          * frame so it can process it.
                    126:          *
                    127:          * These are the CMD_ values from the document system
                    128:          * menu.
                    129:          */
                    130:         case CMD_DOCRESTORE:
                    131:             WinSendMsg(hwndActiveDoc, WM_SYSCOMMAND, (MPARAM)SC_RESTORE, mp2);
                    132:             break;
                    133: 
                    134:         case CMD_DOCNEXT:
                    135:             WinSendMsg(hwndActiveDoc, WM_SYSCOMMAND, (MPARAM)SC_NEXT, mp2);
                    136:             break;
                    137: 
                    138:         case CMD_DOCMINIMIZE:
                    139:             WinSendMsg(hwndActiveDoc, WM_SYSCOMMAND, (MPARAM)SC_MINIMIZE, mp2);
                    140:             break;
                    141: 
                    142:         case CMD_DOCCLOSE:
                    143:             WinSendMsg(hwndActiveDoc, WM_SYSCOMMAND, (MPARAM)SC_CLOSE, mp2);
                    144:             break;
                    145: 
                    146:         case CMD_DOCSPLIT:
                    147:             /*
                    148:              * Call TrackSplitbars() with -1 for xMouse to tell
                    149:              * it to reposition the pointer to where the
                    150:              * splitbars currently are.
                    151:              */
                    152:             WinSetPointer(HWND_DESKTOP, hptrHVSplit);
                    153:             TrackSplitbars(WinWindowFromID(hwndActiveDoc, FID_CLIENT),
                    154:                     SPS_VERT | SPS_HORZ, -1, -1);
                    155:             WinSetPointer(HWND_DESKTOP, hptrArrow);
                    156:             break;
                    157: 
                    158:         case CMD_NEW:
                    159:             if (AppNewDocument(DS_HORZSPLITBAR | DS_VERTSPLITBAR, szDocClass) == FALSE)
                    160:                 WinAlarm(HWND_DESKTOP, WA_ERROR);
                    161:             break;
                    162: 
                    163:         case CMD_CLOSE:
                    164:             /*
                    165:              * Close the active document.
                    166:              */
                    167:             if (hwndActiveDoc)
                    168:                 WinSendMsg(hwndActiveDoc, WM_CLOSE, 0L, 0L);
                    169:             break;
                    170: 
                    171:        case CMD_ABOUT:
                    172:            /*
                    173:             * Put up the About... dialog box
                    174:             */
                    175:            WinDlgBox(HWND_DESKTOP, hwnd, AboutDlgProc, NULL, IDD_ABOUT, NULL);
                    176:            break;
                    177:        
                    178:         case CMD_EXIT:
                    179:             WinPostMsg(hwnd, WM_QUIT, 0L, 0L);
                    180:             break;
                    181: 
                    182:         case CMD_ARRANGETILED:
                    183:             ArrangeWindows(AWP_TILED);
                    184:             break;
                    185: 
                    186:         case CMD_ARRANGECASCADED:
                    187:             ArrangeWindows(AWP_CASCADED);
                    188:             break;
                    189: 
                    190:         default:
                    191:             /*
                    192:              * The means a window title was selected from
                    193:              * the window menu.  Have the MDI code activate
                    194:              * the correct window based on the menuitem ID.
                    195:              *
                    196:              * WARNING: Be sure to keep you applications
                    197:              * menuitem IDs < CMD_WINDOWITEMS.
                    198:              */
                    199:             if (SHORT1FROMMP(mp1) >= CMD_WINDOWITEMS)
                    200:                 MDIDesktopActivateDoc(SHORT1FROMMP(mp1));
                    201:             break;
                    202:         }
                    203:         break;
                    204: 
                    205:     default:
                    206:         return(WinDefWindowProc(hwnd, msg, mp1, mp2));
                    207:         break;
                    208:     }
                    209: 
                    210:     return (0L);
                    211: }
                    212: 
                    213: 
                    214: BOOL AppNewDocument(USHORT fsStyle, PSZ pszClassName)
                    215: {
                    216:     register NPDOC npdocNew;
                    217:     HWND hwndFrame, hwndClient;
                    218:     HWND hwndHScroll, hwndVScroll;
                    219: 
                    220:     npdocNew = MDINewDocument(fsStyle, pszClassName);
                    221: 
                    222:     npdocNew->clrBackground = clrNext++;
                    223:     if (clrNext > CLR_PALEGRAY)
                    224:         clrNext = CLR_BACKGROUND;
                    225: 
                    226:     hwndFrame = npdocNew->hwndFrame;
                    227:     hwndClient = WinWindowFromID(hwndFrame, FID_CLIENT);
                    228: 
                    229:     /*
                    230:      * Setup the scrollbars.
                    231:      */
                    232:     hwndHScroll = WinWindowFromID(hwndFrame, FID_HORZSCROLL);
                    233:     WinSendMsg(hwndHScroll, SBM_SETSCROLLBAR, MPFROMSHORT(0),
                    234:             MPFROM2SHORT(0, 600));
                    235:     hwndHScroll = WinWindowFromID(hwndFrame, ID_HORZSCROLL2);
                    236:     WinSendMsg(hwndHScroll, SBM_SETSCROLLBAR, MPFROMSHORT(0),
                    237:             MPFROM2SHORT(0, 600));
                    238: 
                    239:     hwndVScroll = WinWindowFromID(hwndFrame, FID_VERTSCROLL);
                    240:     WinSendMsg(hwndVScroll, SBM_SETSCROLLBAR, MPFROMSHORT(0),
                    241:             MPFROM2SHORT(0, 600));
                    242:     hwndVScroll = WinWindowFromID(hwndFrame, ID_VERTSCROLL2);
                    243:     WinSendMsg(hwndVScroll, SBM_SETSCROLLBAR, MPFROMSHORT(0),
                    244:             MPFROM2SHORT(0, 600));
                    245: 
                    246:     /*
                    247:      * Set the focus the client so the new window will be
                    248:      * active when we show it.
                    249:      */
                    250:     WinSetFocus(HWND_DESKTOP, hwndClient);
                    251: 
                    252:     /*
                    253:      * Set the initial position of the frame window and make it visible.
                    254:      */
                    255:     MDISetInitialDocPos(hwndFrame);
                    256: 
                    257:     return (TRUE);
                    258: }
                    259: 
                    260: MRESULT CALLBACK AboutDlgProc(HWND hDlg, USHORT msg, MPARAM mp1, MPARAM mp2)
                    261: /*
                    262:     About... dialog procedure
                    263: */
                    264: {
                    265:     switch(msg) {
                    266:        case WM_COMMAND:
                    267:            switch(COMMANDMSG(&msg)->cmd) {
                    268:                case DID_OK: WinDismissDlg(hDlg, TRUE); break;
                    269:                default: break;
                    270:            }
                    271:        default: return WinDefDlgProc(hDlg, msg, mp1, mp2);
                    272:     }
                    273:     return FALSE;
                    274: }

unix.superglobalmegacorp.com

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