Annotation of pmsdk/samples/mdi/app.c, revision 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.