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

1.1       root        1: /***************************************************************************\
                      2: * mdi.c - MDI application
                      3: *
                      4: * Created by Microsoft Corporation, 1989
                      5: \***************************************************************************/
                      6: 
                      7: #define INCL_WINSYS
                      8: #define INCL_WINCOMMON
                      9: #define INCL_WINMESSAGEMGR
                     10: #define INCL_WINPOINTERS
                     11: #define INCL_WININPUT
                     12: #define INCL_WINMENUS
                     13: #define INCL_WINFRAMEMGR
                     14: #define INCL_WINWINDOWMGR
                     15: #define INCL_WINRECTANGLES
                     16: #define INCL_WINHEAP
                     17: 
                     18: #include <os2.h>
                     19: #include "app.h"
                     20: #include "appdata.h"
                     21: #include "mdi.h"
                     22: #include "mdidata.h"
                     23: 
                     24: 
                     25: VOID MDIDesktopSize(HWND hwnd, MPARAM mp1, MPARAM mp2)
                     26: {
                     27:     HWND hwndDoc;
                     28:     RECTL rclWindow;
                     29:     POINTL ptlBorderSize;
                     30:     HENUM henum;
                     31:     SWP swp;
                     32:     ULONG ulStyle;
                     33: 
                     34:     /*
                     35:      * This code keeps maximized MDI windows maximized within the
                     36:      * main client window and bottom-left aligns minimized windows.
                     37:      */
                     38:     WinQueryWindowRect(hwnd, (PRECTL)&rclWindow);
                     39: 
                     40:     WinSendMsg(hwndMDIFrame, WM_QUERYBORDERSIZE, (MPARAM)&ptlBorderSize,
                     41:             0L);
                     42:     WinInflateRect(NULL, (PRECTL)&rclWindow, (SHORT)ptlBorderSize.x,
                     43:             (SHORT)ptlBorderSize.y);
                     44:     rclWindow.yTop += cyTitlebar;
                     45: 
                     46:     swp.hwndInsertBehind = NULL;
                     47: 
                     48:     henum = WinBeginEnumWindows(hwnd);
                     49:     while (hwndDoc = WinGetNextWindow(henum)) {
                     50:         WinLockWindow(hwndDoc, FALSE);
                     51:         ulStyle = WinQueryWindowULong(hwndDoc, QWL_STYLE);
                     52:         if (ulStyle & WS_MAXIMIZED) {
                     53:             swp.hwnd = hwndDoc;
                     54:             swp.x = (SHORT)rclWindow.xLeft;
                     55:             swp.y = (SHORT)rclWindow.yBottom;
                     56:             swp.cx = (SHORT)rclWindow.xRight - (SHORT)rclWindow.xLeft;
                     57:             swp.cy = (SHORT)rclWindow.yTop - (SHORT)rclWindow.yBottom;
                     58:             swp.fs = SWP_MOVE | SWP_SIZE;
                     59:             WinSetMultWindowPos(NULL, (PSWP)&swp, 1);
                     60:         } else if (ulStyle & WS_MINIMIZED) {
                     61:             WinQueryWindowPos(hwndDoc, &swp);
                     62:             swp.y -= (SHORT2FROMMP(mp2) - SHORT2FROMMP(mp1));
                     63:             swp.fs = SWP_MOVE;
                     64:             WinSetMultWindowPos(NULL, (PSWP)&swp, 1);
                     65:         }
                     66:     }
                     67:     WinEndEnumWindows(henum);
                     68: 
                     69:     /*
                     70:      * Adjust yNextNewDoc to keep it top-left aligned.
                     71:      */
                     72:     yNextNewDoc += (SHORT2FROMMP(mp2) - SHORT2FROMMP(mp1));
                     73: }
                     74: 
                     75: 
                     76: VOID MDIDesktopSetFocus(HWND hwnd, MPARAM mp2)
                     77: {
                     78:     HWND hwndTopDoc;
                     79: 
                     80:     /*
                     81:      * If we're getting the focus and there is a document window,
                     82:      * set the focus to the top-most document window so the main
                     83:      * client window never has the focus.
                     84:      */
                     85:     if ((SHORT1FROMMP(mp2) != FALSE) &&
                     86:             (hwndTopDoc = WinQueryWindow(hwnd, QW_TOP, FALSE))) {
                     87:         WinSetFocus(HWND_DESKTOP, hwndTopDoc);
                     88:     }
                     89: }
                     90: 
                     91: 
                     92: VOID MDIDesktopActivateDoc(SHORT idMenuitem)
                     93: {
                     94:     register NPDOC npdoc;
                     95: 
                     96:     npdoc = npdocFirst;
                     97:     while (npdoc != NULL) {
                     98:         if (npdoc->idMI == idMenuitem) {
                     99:             WinSetFocus(HWND_DESKTOP, npdoc->hwndFrame);
                    100: 
                    101:             /*
                    102:              * If the document is minimized then
                    103:              * restore it as well.
                    104:              */
                    105:             if (WinQueryWindowULong(npdoc->hwndFrame, QWL_STYLE) &
                    106:                     WS_MINIMIZED) {
                    107:                 WinSetWindowPos(npdoc->hwndFrame, NULL,
                    108:                         0, 0, 0, 0, SWP_RESTORE);
                    109:             }
                    110:             break;
                    111:         }
                    112:         npdoc = npdoc->npdocNext;
                    113:     }
                    114: }
                    115: 
                    116: 
                    117: MRESULT CALLBACK MainFrameWndProc(HWND hwnd, USHORT msg, MPARAM mp1,
                    118:         MPARAM mp2)
                    119: {
                    120:     switch (msg) {
                    121: 
                    122:     case WM_NEXTMENU:
                    123:         /*
                    124:          * Connect child sysmenu with application menus
                    125:          */
                    126:         if (fAabSysMenu == TRUE) {
                    127:             /* child sysmenu is already in app menu */
                    128:             break;
                    129:         }
                    130: 
                    131: #define hwndCurrent HWNDFROMMP(mp1)
                    132: 
                    133:         if (((hwndCurrent == hwndSysMenu) && !SHORT1FROMMP(mp2)) ||
                    134:                 ((hwndCurrent == hwndAppMenu) && SHORT1FROMMP(mp2))) {
                    135:             if (hwndActiveDoc)
                    136:                 return (WinWindowFromID(hwndActiveDoc, FID_SYSMENU));
                    137:         }
                    138: 
                    139: #undef hwndCurrent
                    140: 
                    141:         break;
                    142:     }
                    143:     return (*pfnMainFrameWndProc)(hwnd, msg, mp1, mp2);
                    144: }
                    145: 

unix.superglobalmegacorp.com

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