Annotation of pmsdk/samples/mdi/mdiinit.c, revision 1.1

1.1     ! root        1: /***************************************************************************\
        !             2: * mdiinit.c - MDI initialization funtions.
        !             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: #define INCL_GPIBITMAPS
        !            18: #define INCL_GPILCIDS
        !            19: #define INCL_DEV
        !            20: 
        !            21: #include <os2.h>
        !            22: #include "app.h"
        !            23: #include "appdata.h"
        !            24: #include "mdi.h"
        !            25: #include "mdidata.h"
        !            26: 
        !            27: /* Function prototypes */
        !            28: VOID InitMDIPointers(VOID);
        !            29: BOOL SetupMenuStuff(HPS hps);
        !            30: VOID InitSplitbars(VOID);
        !            31: VOID InitInitialDocPlacement(VOID);
        !            32: 
        !            33: 
        !            34: BOOL MDIInit(VOID)
        !            35: {
        !            36:     HPS hps;
        !            37: 
        !            38:     /*
        !            39:      * Register the splitbar window class.
        !            40:      */
        !            41:     if (!WinRegisterClass(NULL, szSplitbarClass, (PFNWP)SplitbarWndProc,
        !            42:             CS_MOVENOTIFY | CS_SYNCPAINT, 0))
        !            43:         return(FALSE);
        !            44: 
        !            45:     InitMDIPointers();
        !            46: 
        !            47:     pfnMainFrameWndProc = WinSubclassWindow(hwndMDIFrame,
        !            48:             (PFNWP)MainFrameWndProc);
        !            49: 
        !            50:     hps = WinGetPS(hwndMDI);
        !            51: 
        !            52:     if (SetupMenuStuff(hps) == FALSE)
        !            53:         return(FALSE);
        !            54: 
        !            55:     WinReleasePS(hps);
        !            56: 
        !            57:     InitSplitbars();
        !            58: 
        !            59:     InitInitialDocPlacement();
        !            60: 
        !            61:     return(TRUE);
        !            62: }
        !            63: 
        !            64: 
        !            65: VOID InitInitialDocPlacement(VOID)
        !            66: {
        !            67:     RECTL rclDesktop;
        !            68: 
        !            69:     /*
        !            70:      * New documents will be 2/3 the width of the
        !            71:      * screen and 1/2 the height of the screen.
        !            72:      */
        !            73:     cxNewDoc = (cxScreen * 2) / 3;
        !            74:     cyNewDoc = cyScreen / 2;
        !            75: 
        !            76:     WinQueryWindowRect(hwndMDI, &rclDesktop);
        !            77:     xNextNewDoc = 0;
        !            78:     yNextNewDoc = (SHORT)rclDesktop.yTop - cyNewDoc;
        !            79: 
        !            80:     xCascadeInc = cxSizeBorder + (cxMinmaxButton / 2);
        !            81:     yCascadeInc = cySizeBorder + cyTitlebar - cyBorder;
        !            82: 
        !            83:     xCascadeSlot = 0;
        !            84: }
        !            85: 
        !            86: 
        !            87: VOID InitSplitbars()
        !            88: {
        !            89:     /*
        !            90:      * Calculate the values cxVertSplitbar and cyHorzSplitbar.
        !            91:      *
        !            92:      * The horzontal splitbar is 1/3 the height of the vertical
        !            93:      * scrollbar arrow.  We use the aspect ratio of the display
        !            94:      * to determine the width of the vertical splitbar.
        !            95:      */
        !            96:     cyHorzSplitbar = cyVScrollArrow / 3;
        !            97:     cxVertSplitbar = (USHORT)(cyHorzSplitbar *
        !            98:             rglDevCaps[CAPS_HORIZONTAL_RESOLUTION] /
        !            99:             rglDevCaps[CAPS_VERTICAL_RESOLUTION]);
        !           100: }
        !           101: 
        !           102: 
        !           103: VOID InitMDIPointers(VOID)
        !           104: {
        !           105:     hptrHorzSplit = WinLoadPointer(HWND_DESKTOP, NULL, IDP_HSPLIT);
        !           106:     hptrVertSplit = WinLoadPointer(HWND_DESKTOP, NULL, IDP_VSPLIT);
        !           107:     hptrHVSplit = WinLoadPointer(HWND_DESKTOP, NULL, IDP_HVSPLIT);
        !           108:     hptrArrow = WinQuerySysPointer(HWND_DESKTOP, SPTR_ARROW, TRUE);
        !           109: }
        !           110: 
        !           111: 
        !           112: BOOL SetupMenuStuff(HPS hps)
        !           113: {
        !           114:     MENUITEM mi;
        !           115:     BITMAPINFOHEADER bmpNew, bmpCurrent;
        !           116:     SIZEL gsize;
        !           117:     RECTL rclSrc;
        !           118:     POINTL ptlDst;
        !           119:     DRIVDATA driv;
        !           120:     DEVOPENSTRUC dop;
        !           121: 
        !           122:     hbmChildSysMenu = WinGetSysBitmap(HWND_DESKTOP, SBMP_CHILDSYSMENU);
        !           123: 
        !           124:     GpiQueryFontMetrics(hps, (ULONG)sizeof(FONTMETRICS),
        !           125:             (PFONTMETRICS)&fmSystemFont);
        !           126: 
        !           127:     GpiQueryBitmapParameters(hbmChildSysMenu, &bmpCurrent);
        !           128:     bmpNew.cbFix = sizeof(BITMAPINFOHEADER);
        !           129:     bmpNew.cx = bmpCurrent.cx + (((bmpCurrent.cx - cxBorder) / 4) * 2);
        !           130:     bmpNew.cy = bmpCurrent.cy;
        !           131:     bmpNew.cPlanes = bmpCurrent.cPlanes;
        !           132:     bmpNew.cBitCount = bmpCurrent.cBitCount;
        !           133:     hbmAabChildSysMenu = GpiCreateBitmap(hps, &bmpNew, 0L, NULL, NULL);
        !           134: 
        !           135:     driv.cb = sizeof(ULONG) * 11;
        !           136:     driv.lVersion = 0;
        !           137:     driv.szDeviceName[0] = 0;
        !           138:     driv.abGeneralData[0] = 0L;
        !           139: 
        !           140:     dop.pszDriverName = NULL;
        !           141:     dop.pdriv = (PDRIVDATA)&driv;
        !           142: 
        !           143:     dop.pszLogAddress =
        !           144:     dop.pszDataType =
        !           145:     dop.pszComment =
        !           146:     dop.pszQueueProcName =
        !           147:     dop.pszQueueProcParams =
        !           148:     dop.pszSpoolerParams =
        !           149:     dop.pszNetworkParams = NULL;
        !           150: 
        !           151:     gsize.cx = bmpNew.cx;
        !           152:     gsize.cy = bmpNew.cy;
        !           153: 
        !           154:     hdcMem = DevOpenDC(hps, OD_MEMORY, "*", 8L, (PDEVOPENDATA)&dop, NULL);
        !           155:     hpsMem = GpiCreatePS(NULL, hdcMem, (PSIZEL)&gsize,
        !           156:             PU_PELS | GPIF_DEFAULT | GPIT_MICRO | GPIA_ASSOC);
        !           157:     GpiSetBitmap(hpsMem, hbmAabChildSysMenu);
        !           158: 
        !           159:     rclSrc.xLeft = 0;
        !           160:     rclSrc.yBottom = 0;
        !           161:     rclSrc.xRight = bmpNew.cx;
        !           162:     rclSrc.yTop = bmpNew.cy;
        !           163:     WinFillRect(hpsMem, (PRECTL)&rclSrc, CLR_FALSE);
        !           164: 
        !           165:     rclSrc.xRight = bmpCurrent.cx - cxBorder;
        !           166:     rclSrc.yTop = bmpCurrent.cy;
        !           167:     ptlDst.x = (bmpCurrent.cx - cxBorder) / 4;
        !           168:     ptlDst.y = 0;
        !           169:     WinDrawBitmap(hpsMem, hbmChildSysMenu, (PRECTL)&rclSrc, (PPOINTL)&ptlDst,
        !           170:             CLR_TRUE, CLR_FALSE, DBM_NORMAL);
        !           171: 
        !           172:     GpiSetBitmap(hpsMem, NULL);
        !           173:     GpiDestroyPS(hpsMem);
        !           174:     DevCloseDC(hdcMem);
        !           175: 
        !           176:     /*
        !           177:      * Get menu window handles.
        !           178:      */
        !           179:     hwndMainMenu = WinWindowFromID(hwndMDIFrame, FID_MENU);
        !           180:     WinSendMsg(hwndMainMenu, MM_QUERYITEM, MPFROM2SHORT(IDM_WINDOW, FALSE),
        !           181:                MPFROMP(&mi));
        !           182:     hwndWindowMenu = mi.hwndSubMenu;
        !           183:     hwndSysMenu = WinWindowFromID(hwndMDIFrame, FID_SYSMENU);
        !           184:     hwndAppMenu = WinWindowFromID(hwndMDIFrame, FID_MENU);
        !           185: 
        !           186:     /* set up menuitem for application menu bar sysmenu */
        !           187:     WinSendMsg(hwndMainMenu, MM_QUERYITEM, MPFROM2SHORT(IDM_AABDOCSYSMENU, FALSE),
        !           188:                MPFROMP(&miAabSysMenu));
        !           189:     miAabSysMenu.hItem = (ULONG)hbmAabChildSysMenu;
        !           190:     WinSendMsg(hwndMainMenu, MM_REMOVEITEM, MPFROM2SHORT(IDM_AABDOCSYSMENU, FALSE),
        !           191:                (MPARAM)NULL);
        !           192: 
        !           193:     return(TRUE);
        !           194: }
        !           195: 
        !           196: 
        !           197: VOID MDITerminate(VOID)
        !           198: {
        !           199:     /*
        !           200:      * Only destroy the AabSysMenu if it isn't already in the AAB.
        !           201:      * If it is we don't need to destroy it since the frame window
        !           202:      * manager will.
        !           203:      */
        !           204:     if (fAabSysMenu == FALSE)
        !           205:         WinDestroyWindow(miAabSysMenu.hwndSubMenu);
        !           206: 
        !           207:     GpiDeleteBitmap(hbmChildSysMenu);
        !           208:     GpiDeleteBitmap(hbmAabChildSysMenu);
        !           209: 
        !           210:     WinDestroyPointer(hptrHorzSplit);
        !           211:     WinDestroyPointer(hptrVertSplit);
        !           212:     WinDestroyPointer(hptrHVSplit);
        !           213:     WinDestroyPointer(hptrArrow);
        !           214: }

unix.superglobalmegacorp.com

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