home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / 3DTOSHI2.ZIP / mpgui / source / guimdi.cpp < prev    next >
C/C++ Source or Header  |  1996-04-17  |  16KB  |  541 lines

  1.  
  2. // guimdi.cpp
  3. //
  4. // Copyright (c) 1995 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. #include "stdgfx.h"
  7. #include "guimdi.h"
  8.  
  9. APIRESULT APIPROC GUIMDIChildProc ( HWINDOW hWindow, MESSAGE iMessage,
  10.                                     PARAM1 Param1, PARAM2 Param2 );
  11. APIRESULT APIPROC GUIMDIFrameProc ( HWINDOW hWindow, MESSAGE iMessage,
  12.                                     PARAM1 Param1, PARAM2 Param2 );
  13.  
  14. //***********************************************
  15. //
  16. // GUI MDI Child Class
  17. //
  18. //***********************************************
  19.  
  20. GUIMDICHILD *NewMDIChild=NULL;
  21.  
  22. GUIMDICHILD::GUIMDICHILD () : GUICHILD ()
  23.   {
  24.     strcpy ( ClassName, "GUIMDICHILD" );
  25.     #if defined (__FORWINDOWS__)
  26.       MDICreate.szClass = new CHAR [128];
  27.       MDICreate.szTitle = new CHAR [128];
  28.     #endif
  29.   } // End of Constructor for GUIMDICHILD
  30.  
  31. GUIMDICHILD::~GUIMDICHILD ()
  32.   {
  33.     #if defined (__FORWINDOWS__)
  34.       delete (char*)(MDICreate.szClass);
  35.       delete (char*)(MDICreate.szTitle);
  36.     #endif
  37.   } // End of Destructor for GUIMDICHILD
  38.  
  39. VOID GUIMDICHILD::RegisterWindow ()
  40.   {
  41.     #if defined (__FORWINDOWS__)
  42.       WNDCLASS WndClass;
  43.       WndClass.cbClsExtra = 0;
  44.       WndClass.cbWndExtra = 0;
  45.       #if defined (__FORWIN386__)
  46.         WndClass.hbrBackground = GetStockObject ( (short)WinBG );
  47.       #else
  48.         WndClass.hbrBackground = GetStockObject ( WinBG );
  49.       #endif
  50.       WndClass.hCursor = LoadCursor ( NULL, IDC_ARROW );
  51.       WndClass.hIcon = LoadIcon ( NULL, "END" );
  52.       WndClass.hInstance = (HINSTANCE)hInstance;
  53.       WndClass.lpfnWndProc = (WNDPROC)GUIMDIChildProc;
  54.       WndClass.lpszClassName = ClassName;
  55.       WndClass.lpszMenuName = NULL;
  56.       WndClass.style = (UINT)ClassStyle;
  57.  
  58.       RegisterClass ( &WndClass );
  59.  
  60.     #elif defined (__FOROS2__)
  61.       WinRegisterClass ( hAB, ClassName, GUIMDIChildProc, ClassStyle, 0 );
  62.     #endif
  63.   } // End of ResgisterWindow for GUIMDICHILD
  64.  
  65. BOOLEAN GUIMDICHILD::Create ( STRING Title, LONG x, LONG y, LONG Wd, LONG Ht,
  66.                               GUIWINDOW *Parent )
  67.   {
  68.     PreRegister (); 
  69.     RegisterWindow ();
  70.     NewMDIChild = this;
  71.  
  72.     ParentWindow = Parent;
  73.     HWINDOW hParent;
  74.     HWINDOW hNew;
  75.  
  76.     #if defined (__FORWINDOWS__)
  77.  
  78.       strcpy ( (char*)MDICreate.szClass, ClassName );
  79.       strcpy ( (char*)MDICreate.szTitle, Title );
  80.       MDICreate.hOwner = hInstance;
  81.       #if defined (__FORWIN386__)
  82.         MDICreate.x = (short)x;
  83.         MDICreate.y = (short)y;
  84.         MDICreate.cx = (short)Wd;
  85.         MDICreate.cy = (short)Ht;
  86.         MDICreate.style = (UINT)WinStyle;
  87.       #else
  88.         MDICreate.x = x;
  89.         MDICreate.y = y;
  90.         MDICreate.cx = Wd;
  91.         MDICreate.cy = Ht;
  92.         MDICreate.style = WinStyle;
  93.       #endif
  94.       
  95.       MDICreate.lParam = NULL;
  96.  
  97.       if (Parent==NULL)
  98.         hParent = HDESKTOP;
  99.       else
  100.         hParent = Parent->GetClient ();
  101.  
  102.       hWindow = (HWND)SendMessage ( hParent, WM_MDICREATE, 0,
  103.                                     (LONG)(LPMDICREATESTRUCT)(&MDICreate) );
  104.       hNew = hWindow;
  105.       CreateClientWindow ();
  106.  
  107.     #elif defined (__FOROS2__)  
  108.       if (Parent==NULL)
  109.         hParent = HDESKTOP;
  110.       else
  111.         hParent = Parent->GetClient ();
  112.         
  113.       ULONG CreateFlag = WinExStyle;
  114.       hWindow = WinCreateStdWindow ( hParent, WinStyle, &CreateFlag, ClassName,
  115.                                      Title, 0, 0, 0, &hClient );
  116.       hNew = hClient;
  117.       if (x&y&Wd&Ht)
  118.         {}
  119.                                      
  120.     #elif defined (__FORDOS__)
  121.       if (Title)
  122.         {}
  123.       if (x&y&Wd&Ht)
  124.         {}
  125.       if (Parent)
  126.         {}
  127.       if (hParent)
  128.         {}
  129.     #endif
  130.     AddWindow ( this, hNew );
  131.     NewMDIChild = NULL;
  132.     return SUCCESS;
  133.   } // End of Create for GUIMDICHILD
  134.  
  135.  
  136. //****************************************************
  137. //
  138. // MDI Child Window Procedure
  139. //
  140. //****************************************************
  141.  
  142. APIRESULT APIPROC GUIMDIChildProc ( HWINDOW hWindow, MESSAGE iMessage,
  143.                                     PARAM1 Param1, PARAM2 Param2 )
  144.   {
  145.     LONG Result;
  146.     GUIWINDOW *WinPtr;
  147.  
  148.     Result = 0;
  149.     WinPtr = FindWindow ( hWindow );
  150.     if (WinPtr==NULL)
  151.       {
  152.         if (NewMDIChild!=NULL)
  153.           Result = NewMDIChild->WndProc ( hWindow, iMessage, Param1, Param2, FALSE );
  154.       } // End if
  155.     else
  156.       {
  157.         Result = WinPtr->WndProc ( hWindow, iMessage, Param1, Param2, FALSE );
  158.       } // End else
  159.  
  160.     if (Result!=0)
  161.       return 0;
  162.  
  163.     #if defined (__FORWINDOWS__)
  164.       return DefMDIChildProc ( hWindow, iMessage, Param1, Param2 );
  165.  
  166.     #elif defined (__FOROS2__)
  167.       return WinDefWindowProc ( hWindow, iMessage, Param1, Param2 );
  168.  
  169.     #elif defined (__FORDOS__)
  170.       if (hWindow&iMessage&Param1&Param2)
  171.         {}
  172.       return 0;
  173.     #endif
  174.   } // End of GUIMDIChildProc
  175.  
  176.  
  177. //***********************************************
  178. //
  179. // GUI MDI Frame Class
  180. //
  181. //***********************************************
  182.  
  183. GUIMDIFRAME *NewMDIFrame=NULL;
  184.  
  185. GUIMDIFRAME::GUIMDIFRAME ()
  186.   {
  187.     strcpy ( ClassName, "GUIMDIFRAME" );
  188.   } // End of Constructor for GUIMDIFRAME
  189.  
  190. GUIMDIFRAME::~GUIMDIFRAME ()
  191.   {
  192.   } // End of Destructor for GUIMDIFRAME
  193.  
  194. VOID GUIMDIFRAME::RegisterWindow ()
  195.   {
  196.     #if defined (__FORWINDOWS__)
  197.       WNDCLASS WndClass;
  198.       WndClass.cbClsExtra = 0;
  199.       WndClass.cbWndExtra = 0;
  200.       #if defined (__FORWIN386__)
  201.         WndClass.hbrBackground = GetStockObject ( (short)WinBG );
  202.       #else
  203.         WndClass.hbrBackground = GetStockObject ( WinBG );
  204.       #endif
  205.       WndClass.hCursor = LoadCursor ( NULL, IDC_ARROW );
  206.       WndClass.hIcon = LoadIcon ( NULL, "END" );
  207.       WndClass.hInstance = (HINSTANCE)hInstance;
  208.       WndClass.lpfnWndProc = (WNDPROC)GUIMDIFrameProc;
  209.       WndClass.lpszClassName = ClassName;
  210.       WndClass.lpszMenuName = NULL;
  211.       WndClass.style = (UINT)ClassStyle;
  212.  
  213.       RegisterClass ( &WndClass );
  214.  
  215.     #elif defined (__FOROS2__)
  216.       WinRegisterClass ( hAB, ClassName, GUIMDIFrameProc, ClassStyle, 0 );
  217.     #endif
  218.   } // End of ResgisterWindow for GUIMDIFRAME
  219.  
  220. BOOLEAN GUIMDIFRAME::Create ( STRING Title, LONG x, LONG y, LONG Wd, LONG Ht,
  221.                               GUIWINDOW *Parent )
  222.   {
  223.     PreRegister (); 
  224.     RegisterWindow ();
  225.     NewMDIFrame = this;
  226.  
  227.     ParentWindow = Parent;
  228.     HWINDOW hParent;
  229.     HWINDOW hNew;
  230.  
  231.     #if defined (__FORWINDOWS__)
  232.  
  233.       if (Parent==NULL)
  234.         hParent = HDESKTOP;
  235.       else
  236.         hParent = Parent->GetClient ();
  237.  
  238.       #if defined (__FORWIN386__)
  239.         if (WinExStyle==0)
  240.           hWindow = CreateWindow ( ClassName, Title, WinStyle, (short)x, (short)y,
  241.                                    (short)Wd, (short)Ht, hParent, NULL,
  242.                                    hInstance, NULL );
  243.         else
  244.           hWindow = CreateWindowEx ( WinExStyle, ClassName, Title, WinStyle, (short)x, (short)y,
  245.                                      (short)Wd, (short)Ht,
  246.                                      hParent, NULL, hInstance, NULL );
  247.       #else
  248.         if (WinExStyle==0)
  249.           hWindow = CreateWindow ( ClassName, Title, WinStyle, x, y, Wd, Ht, hParent, NULL,
  250.                                    hInstance, NULL );
  251.         else
  252.           hWindow = CreateWindowEx ( WinExStyle, ClassName, Title, WinStyle, x, y, Wd, Ht,
  253.                                      hParent, NULL, hInstance, NULL );
  254.       #endif
  255.  
  256.       hNew = hWindow;
  257.       AddWindow ( this, hNew );
  258.       NewMDIFrame = NULL;
  259.  
  260.       CLIENTCREATESTRUCT CliCreate;
  261.       CliCreate.hWindowMenu = NULL;
  262.       CliCreate.idFirstChild = 100;
  263.       hClient = CreateWindow ( "MDICLIENT", NULL, GUI_WIN_CHILD | GUI_WIN_VISIBLE | WS_CLIPCHILDREN,
  264.                                0, 0, 0, 0, hWindow, 0, hInstance, (LPSTR)(&CliCreate) );
  265.                                
  266.     #elif defined (__FOROS2__)  
  267.       if (Parent==NULL)
  268.         hParent = HDESKTOP;
  269.       else
  270.         hParent = Parent->GetClient ();
  271.         
  272.       ULONG CreateFlag = WinExStyle;
  273.       hWindow = WinCreateStdWindow ( hParent, WinStyle, &CreateFlag, ClassName,
  274.                                      Title, 0, 0, 0, &hClient );
  275.       hNew = hClient;
  276.       AddWindow ( this, hNew );
  277.       NewMDIFrame = NULL;
  278.       if (x&y&Wd&Ht)
  279.         {}
  280.                                      
  281.     #elif defined (__FORDOS__)
  282.       if (Title)
  283.         {}
  284.       if (x&y&Wd&Ht)
  285.         {}
  286.       if (Parent)
  287.         {}
  288.       if (hParent)
  289.         {}
  290.       if (hNew)
  291.         {}  
  292.     #elif defined (__FORUNIX__)
  293.       if (Title)
  294.         {}
  295.       if (x&y&Wd&Ht)
  296.         {}
  297.       if (Parent)
  298.         {}
  299.       if (hParent)
  300.         {}
  301.       if (hNew)
  302.         {}  
  303.        #if defined (__FORMOTIF__)
  304.           INT NumArgs;
  305.           Arg MainAttrList[4];
  306.           Widget WinWidget;
  307.  
  308.           XtSetArg ( MainAttrList[0], XmNwidth, Wd );
  309.           XtSetArg ( MainAttrList[1], XmNheight, Ht );
  310.           XtSetArg ( MainAttrList[2], XmNx, x );
  311.           XtSetArg ( MainAttrList[3], XmNy, y );
  312.           WinWidget = XtAppInitialize ( &XtApp, Title, 
  313.                                       NULL, 0, &NumArgs, NULL, NULL, 
  314.                                       MainAttrList, 2 );  
  315.           XtRealizeWidget ( WinWidget );
  316.  
  317.           MainXDisplay = XtDisplay ( WinWidget );
  318.  
  319.           hWindow = XtWindow ( WinWidget );
  320.           hClient = hWindow;
  321.           hNew = hClient;     
  322.           AddWindow ( this, hNew );
  323.           NewMDIFrame = NULL;
  324.        #endif   
  325.     #endif
  326.     return SUCCESS;
  327.   } // End of Create for GUIMDIFRAME
  328.  
  329. LONG GUIMDIFRAME::WndProc ( HWINDOW hWnd, MESSAGE iMessage, PARAM1 Param1, PARAM2 Param2, BOOLEAN FromClient )
  330.   {
  331.     LONG Result;
  332.     hWindow = hWnd;
  333.     if (Param1)
  334.       {}
  335.     if (Param2)
  336.       {}
  337.     if (FromClient)
  338.       {}
  339.         
  340.     Result = 0;
  341.     switch (iMessage)
  342.       {
  343.         case GUI_WM_CREATE :
  344.           Result = OnCreate ();
  345.           break;
  346.  
  347.         case GUI_WM_CLOSE :
  348.           Result = OnClose ();
  349.           break;
  350.           
  351.         case GUI_WM_DESTROY :
  352.           Result = OnDestroy ();
  353.           DiscardWindow ( hWindow );
  354.           break;
  355.  
  356.         case GUI_WM_PAINT :
  357.           ResetClientArea ();
  358.           #if defined (__FORWINDOWS__)
  359.             PAINTSTRUCT Ps;
  360.             HDISPLAY hDisplay;
  361.             hDisplay = BeginPaint ( hWindow, &Ps );
  362.             Result = OnPaint ( hDisplay );
  363.             EndPaint ( hWindow, &Ps );
  364.           #elif defined (__FOROS2__)
  365.             HDISPLAY hDisplay;
  366.             hDisplay = WinBeginPaint ( hWindow, NULLHANDLE, NULL );
  367.             Result = OnPaint ( hDisplay );
  368.             WinEndPaint ( hDisplay );
  369.           #elif defined (__FORDOS__)
  370.             Result = OnPaint ( 0 );
  371.           #endif
  372.           break;
  373.  
  374.         case GUI_WM_COMMAND :
  375.           #if defined (__FORWINDOWS__)
  376.             Result = OnCommand ( Param1 );
  377.             if (Result==0)
  378.               {
  379.                 HWINDOW hChild;
  380.                 hChild = (HWINDOW)LOWORD ( SendMessage ( hClient, WM_MDIGETACTIVE,
  381.                                                          0, 0 ) );
  382.                 if (IsWindow(hChild))
  383.                   Result = SendMessage ( hChild, GUI_WM_COMMAND, Param1, Param2 );
  384.               } // End if
  385.           #elif defined (__FOROS2__)
  386.             Result = OnCommand ( COMMANDMSG(&iMessage)->cmd );
  387.           #endif
  388.           break;
  389.  
  390.                           case GUI_WM_ACTIVATE :
  391.                                         LONG ActiveFlags;
  392.                                         BOOLEAN Minimized;
  393.                                         ActiveFlags = LOWORD((LONG)Param1);
  394.                                         Minimized = HIWORD((LONG)Param1);
  395.                                         Result = OnActivate ( ActiveFlags, Minimized );
  396.                                         break;
  397.  
  398.         case GUI_WM_KEYDOWN :
  399.           Result = OnKeyDown ( (LONG)Param1 );
  400.           break;
  401.  
  402.         case GUI_WM_KEYUP :
  403.           Result = OnKeyUp ( (LONG)Param1 );
  404.           break;
  405.  
  406.         case GUI_WM_MOUSEMOVE :
  407.         case GUI_WM_LBUTTONDOWN :
  408.         case GUI_WM_LBUTTONUP :
  409.         case GUI_WM_LBUTTONDBLCLK :
  410.         case GUI_WM_MBUTTONDOWN :
  411.         case GUI_WM_MBUTTONUP :
  412.         case GUI_WM_MBUTTONDBLCLK :
  413.         case GUI_WM_RBUTTONDOWN :
  414.         case GUI_WM_RBUTTONUP :
  415.         case GUI_WM_RBUTTONDBLCLK :
  416.           LONG Mx, My;
  417.           LONG Flags;
  418.  
  419.           #if defined (__FORWINDOWS__)
  420.             Flags = (LONG)Param1;
  421.             Mx = LOWORD ( Param2 );
  422.             My = HIWORD ( Param2 );
  423.             if (FromClient)
  424.               Result = OnMouse ( iMessage, Flags, Mx, My );
  425.           #elif defined (__FOROS2__)
  426.             if (Mx&My&Flags)
  427.               {}
  428.           #elif defined (__FORDOS__)
  429.             if (Mx&My&Flags)
  430.               {}
  431.           #endif
  432.           break;
  433.  
  434.         case GUI_WM_SIZE :
  435.           ResetClientArea ();
  436.           Result = OnSize ( LOWORD (Param2), HIWORD (Param2) );
  437.           break;
  438.  
  439.         case GUI_WM_TIMER :
  440.           Result = OnTimer ();
  441.           break;
  442.  
  443.         case GUI_WM_VSCROLL :
  444.           #if defined (__FORWINDOWS__)
  445.             Result = OnScroll ( SBAR_VERT, (LONG)Param1, LOWORD((LONG)Param2));
  446.           #endif
  447.           break;
  448.         case GUI_WM_HSCROLL :
  449.           #if defined (__FORWINDOWS__)
  450.             Result = OnScroll ( SBAR_HORZ, Param1, LOWORD(Param2));
  451.           #endif
  452.           break;
  453.  
  454.         case GUI_WM_POSCHANGING :
  455.           #if defined (__FORWINDOWS__)
  456.             WINPOSCHANGE Wpc;
  457.             WINDOWPOS FAR *lpwp;
  458.             #if defined (__FORWIN386__)
  459.               lpwp = (WINDOWPOS FAR*)MK_FP(Param2>>16,Param2&0xFFFF);
  460.             #else
  461.               lpwp = (WINDOWPOS FAR*)Param2;
  462.             #endif
  463.             Wpc.xPos = lpwp->x;
  464.             Wpc.yPos = lpwp->y;
  465.             Wpc.Width = lpwp->cx;
  466.             Wpc.Height = lpwp->cy;
  467.             Wpc.Flags = lpwp->flags;
  468.  
  469.             Result = OnPosChanging ( &Wpc );
  470.  
  471.             #if defined (__FORWIN386__)
  472.               lpwp->x = (short)Wpc.xPos;
  473.               lpwp->y = (short)Wpc.yPos;
  474.               lpwp->cx = (short)Wpc.Width;
  475.               lpwp->cy = (short)Wpc.Height;
  476.               lpwp->flags = Wpc.Flags;
  477.             #else
  478.               lpwp->x = Wpc.xPos;
  479.               lpwp->y = Wpc.yPos;
  480.               lpwp->cx = Wpc.Width;
  481.               lpwp->cy = Wpc.Height;
  482.               lpwp->flags = Wpc.Flags;
  483.             #endif
  484.           #endif
  485.           break;
  486.  
  487.         default :
  488.           Result = UserProc ( iMessage, Param1, Param2 );
  489.           break;
  490.       } // End switch
  491.     return Result;
  492.   } // End of WndProc for GUIMDIFRAME
  493.  
  494. //****************************************************
  495. //
  496. // MDI Frame Window Procedure
  497. //
  498. //****************************************************
  499.  
  500. APIRESULT APIPROC GUIMDIFrameProc ( HWINDOW hWindow, MESSAGE iMessage,
  501.                                     PARAM1 Param1, PARAM2 Param2 )
  502.   {
  503.     LONG Result;
  504.     HWINDOW hWndClient=0;
  505.     GUIWINDOW *WinPtr;
  506.  
  507.     if (hWndClient)
  508.       {}
  509.     Result = 0;
  510.     WinPtr = FindWindow ( hWindow );
  511.     if (WinPtr==NULL)
  512.       {
  513.         if (NewMDIFrame!=NULL)
  514.           {
  515.             Result = NewMDIFrame->WndProc ( hWindow, iMessage, Param1, Param2, FALSE );
  516.             hWndClient = NewMDIFrame->GetClient ();
  517.           } // End if
  518.       } // End if
  519.     else
  520.       {
  521.         Result = WinPtr->WndProc ( hWindow, iMessage, Param1, Param2, FALSE );
  522.         hWndClient = WinPtr->GetClient ();
  523.       } // End else
  524.  
  525.     if (Result!=0)
  526.       return 0;
  527.  
  528.     #if defined (__FORWINDOWS__)
  529.       return DefFrameProc ( hWindow, hWndClient, iMessage, Param1, Param2 );
  530.  
  531.     #elif defined (__FOROS2__)
  532.       return WinDefWindowProc ( hWindow, iMessage, Param1, Param2 );
  533.  
  534.     #elif defined (__FORDOS__)
  535.       if (hWindow&iMessage&Param1&Param2&hWndClient)
  536.         {}
  537.       return 0;
  538.     #endif
  539.   } // End of GUIMDIFrameProc
  540.  
  541.