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