home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / os2 / mdi / test.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-12-15  |  2.8 KB  |  84 lines

  1. #define INCL_WIN
  2. #define INCL_GPI
  3. #include <malloc.h>
  4. #include <stdio.h>
  5. #include <os2.h>
  6.  
  7. #include "Test.H"
  8. #include "MDI.H"
  9.  
  10. VOID EXPENTRY MDIInitialize (HAB);
  11. MRESULT EXPENTRY RootWndProc (HWND, USHORT, MPARAM, MPARAM) ;
  12. MRESULT EXPENTRY ChildWndProc (HWND, USHORT, MPARAM, MPARAM) ;
  13.  
  14. HAB  hab ;
  15. HWND hwndRoot;
  16.  
  17. PCHAR pszTitles[] = {"White", "Blue", "Red", "Pink", "Green", "Cyan", "Yellow"};
  18. PCHAR pszProg = "Test.EXE";
  19.  
  20. VOID main (VOID)
  21.   {HMQ hmq ;
  22.    HWND hwndFrame, hwndClient ;
  23.    QMSG qmsg ;
  24.    ULONG flCreateFlags = FCF_STANDARD | FCF_NOBYTEALIGN;
  25.    PCHAR pszDeskData;
  26.    hab = WinInitialize (0) ;
  27.    hmq = WinCreateMsgQueue (hab, 0) ;
  28.    MDIInitialize (hab);
  29.    hwndFrame = MDICreateDesktop (RootWndProc, flCreateFlags, "",
  30.      NULL, IDR_RESOURCES, &hwndClient, 100, 99, "E~xit", "~Window");
  31.    if (hwndFrame = NULL) return;
  32.    pszDeskData = (PCHAR) WinSendMsg (hwndClient, MDI_MSG_LOCATE_DESKTOP_DATA, NULL, NULL);
  33.    hwndRoot = hwndClient;
  34.    while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  35.       WinDispatchMsg (hab, &qmsg) ;
  36.    WinDestroyMsgQueue (hmq) ;
  37.    WinTerminate (hab) ;
  38.   }
  39.  
  40. MRESULT EXPENTRY RootWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  41.   {HWND hwndFrame, hwndClient ;
  42.    COLOR clr;
  43.    ULONG flCreateFlags = FCF_TITLEBAR | FCF_SYSMENU | FCF_SIZEBORDER | FCF_MINMAX | FCF_ICON | FCF_SHELLPOSITION | FCF_NOBYTEALIGN;
  44.    PCHAR pszDocData, pszInstData;
  45.    switch (msg)
  46.      {case WM_COMMAND:
  47.          switch (LOUSHORT (mp1))
  48.            {case IDM_WHITE:
  49.             case IDM_BLUE:
  50.             case IDM_RED:
  51.             case IDM_PINK:
  52.             case IDM_GREEN:
  53.             case IDM_CYAN:
  54.             case IDM_YELLOW:
  55.                clr = LOUSHORT (mp1) - IDM_WHITE;
  56.                hwndFrame = MDICreateDocument (ChildWndProc, hwndRoot, flCreateFlags,
  57.                  pszTitles[clr], NULL, IDR_RESOURCES, &hwndClient, 100, 100);
  58.                if (hwndFrame == NULL) break;
  59.                pszDocData = (PCHAR) WinSendMsg (hwndClient, MDI_MSG_LOCATE_DOCUMENT_DATA, NULL, NULL);
  60.                pszInstData = (PCHAR) WinSendMsg (hwndClient, MDI_MSG_LOCATE_INSTANCE_DATA, NULL, NULL);
  61.                WinSetWindowULong (hwndClient, QWL_USER, clr);
  62.                break;
  63.            }
  64.          break;
  65.      }
  66.    return MDIDesktopWndProc (hwnd, msg, mp1, mp2) ;
  67.   }
  68.  
  69. MRESULT EXPENTRY ChildWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  70.   {HPS hps;
  71.    RECTL rcl;
  72.    COLOR clr;
  73.    switch (msg)
  74.      {case WM_PAINT:
  75.          hps = WinBeginPaint (hwnd, NULL, NULL);
  76.          clr = WinQueryWindowULong (hwnd, QWL_USER);
  77.          WinQueryWindowRect (hwnd, &rcl);
  78.          WinFillRect (hps, &rcl, clr);
  79.          WinEndPaint (hps);
  80.          return NULL;
  81.      }
  82.    return MDIDocumentWndProc (hwnd, msg, mp1, mp2) ;
  83.   }
  84.