home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Hack-Phreak Scene Programs
/
cleanhpvac.zip
/
cleanhpvac
/
3DTOSHI2.ZIP
/
mpgui
/
source
/
guimdi.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-17
|
16KB
|
541 lines
// guimdi.cpp
//
// Copyright (c) 1995 by Toshiaki Tsuji, all rights reserved.
#include "stdgfx.h"
#include "guimdi.h"
APIRESULT APIPROC GUIMDIChildProc ( HWINDOW hWindow, MESSAGE iMessage,
PARAM1 Param1, PARAM2 Param2 );
APIRESULT APIPROC GUIMDIFrameProc ( HWINDOW hWindow, MESSAGE iMessage,
PARAM1 Param1, PARAM2 Param2 );
//***********************************************
//
// GUI MDI Child Class
//
//***********************************************
GUIMDICHILD *NewMDIChild=NULL;
GUIMDICHILD::GUIMDICHILD () : GUICHILD ()
{
strcpy ( ClassName, "GUIMDICHILD" );
#if defined (__FORWINDOWS__)
MDICreate.szClass = new CHAR [128];
MDICreate.szTitle = new CHAR [128];
#endif
} // End of Constructor for GUIMDICHILD
GUIMDICHILD::~GUIMDICHILD ()
{
#if defined (__FORWINDOWS__)
delete (char*)(MDICreate.szClass);
delete (char*)(MDICreate.szTitle);
#endif
} // End of Destructor for GUIMDICHILD
VOID GUIMDICHILD::RegisterWindow ()
{
#if defined (__FORWINDOWS__)
WNDCLASS WndClass;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
#if defined (__FORWIN386__)
WndClass.hbrBackground = GetStockObject ( (short)WinBG );
#else
WndClass.hbrBackground = GetStockObject ( WinBG );
#endif
WndClass.hCursor = LoadCursor ( NULL, IDC_ARROW );
WndClass.hIcon = LoadIcon ( NULL, "END" );
WndClass.hInstance = (HINSTANCE)hInstance;
WndClass.lpfnWndProc = (WNDPROC)GUIMDIChildProc;
WndClass.lpszClassName = ClassName;
WndClass.lpszMenuName = NULL;
WndClass.style = (UINT)ClassStyle;
RegisterClass ( &WndClass );
#elif defined (__FOROS2__)
WinRegisterClass ( hAB, ClassName, GUIMDIChildProc, ClassStyle, 0 );
#endif
} // End of ResgisterWindow for GUIMDICHILD
BOOLEAN GUIMDICHILD::Create ( STRING Title, LONG x, LONG y, LONG Wd, LONG Ht,
GUIWINDOW *Parent )
{
PreRegister ();
RegisterWindow ();
NewMDIChild = this;
ParentWindow = Parent;
HWINDOW hParent;
HWINDOW hNew;
#if defined (__FORWINDOWS__)
strcpy ( (char*)MDICreate.szClass, ClassName );
strcpy ( (char*)MDICreate.szTitle, Title );
MDICreate.hOwner = hInstance;
#if defined (__FORWIN386__)
MDICreate.x = (short)x;
MDICreate.y = (short)y;
MDICreate.cx = (short)Wd;
MDICreate.cy = (short)Ht;
MDICreate.style = (UINT)WinStyle;
#else
MDICreate.x = x;
MDICreate.y = y;
MDICreate.cx = Wd;
MDICreate.cy = Ht;
MDICreate.style = WinStyle;
#endif
MDICreate.lParam = NULL;
if (Parent==NULL)
hParent = HDESKTOP;
else
hParent = Parent->GetClient ();
hWindow = (HWND)SendMessage ( hParent, WM_MDICREATE, 0,
(LONG)(LPMDICREATESTRUCT)(&MDICreate) );
hNew = hWindow;
CreateClientWindow ();
#elif defined (__FOROS2__)
if (Parent==NULL)
hParent = HDESKTOP;
else
hParent = Parent->GetClient ();
ULONG CreateFlag = WinExStyle;
hWindow = WinCreateStdWindow ( hParent, WinStyle, &CreateFlag, ClassName,
Title, 0, 0, 0, &hClient );
hNew = hClient;
if (x&y&Wd&Ht)
{}
#elif defined (__FORDOS__)
if (Title)
{}
if (x&y&Wd&Ht)
{}
if (Parent)
{}
if (hParent)
{}
#endif
AddWindow ( this, hNew );
NewMDIChild = NULL;
return SUCCESS;
} // End of Create for GUIMDICHILD
//****************************************************
//
// MDI Child Window Procedure
//
//****************************************************
APIRESULT APIPROC GUIMDIChildProc ( HWINDOW hWindow, MESSAGE iMessage,
PARAM1 Param1, PARAM2 Param2 )
{
LONG Result;
GUIWINDOW *WinPtr;
Result = 0;
WinPtr = FindWindow ( hWindow );
if (WinPtr==NULL)
{
if (NewMDIChild!=NULL)
Result = NewMDIChild->WndProc ( hWindow, iMessage, Param1, Param2, FALSE );
} // End if
else
{
Result = WinPtr->WndProc ( hWindow, iMessage, Param1, Param2, FALSE );
} // End else
if (Result!=0)
return 0;
#if defined (__FORWINDOWS__)
return DefMDIChildProc ( hWindow, iMessage, Param1, Param2 );
#elif defined (__FOROS2__)
return WinDefWindowProc ( hWindow, iMessage, Param1, Param2 );
#elif defined (__FORDOS__)
if (hWindow&iMessage&Param1&Param2)
{}
return 0;
#endif
} // End of GUIMDIChildProc
//***********************************************
//
// GUI MDI Frame Class
//
//***********************************************
GUIMDIFRAME *NewMDIFrame=NULL;
GUIMDIFRAME::GUIMDIFRAME ()
{
strcpy ( ClassName, "GUIMDIFRAME" );
} // End of Constructor for GUIMDIFRAME
GUIMDIFRAME::~GUIMDIFRAME ()
{
} // End of Destructor for GUIMDIFRAME
VOID GUIMDIFRAME::RegisterWindow ()
{
#if defined (__FORWINDOWS__)
WNDCLASS WndClass;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
#if defined (__FORWIN386__)
WndClass.hbrBackground = GetStockObject ( (short)WinBG );
#else
WndClass.hbrBackground = GetStockObject ( WinBG );
#endif
WndClass.hCursor = LoadCursor ( NULL, IDC_ARROW );
WndClass.hIcon = LoadIcon ( NULL, "END" );
WndClass.hInstance = (HINSTANCE)hInstance;
WndClass.lpfnWndProc = (WNDPROC)GUIMDIFrameProc;
WndClass.lpszClassName = ClassName;
WndClass.lpszMenuName = NULL;
WndClass.style = (UINT)ClassStyle;
RegisterClass ( &WndClass );
#elif defined (__FOROS2__)
WinRegisterClass ( hAB, ClassName, GUIMDIFrameProc, ClassStyle, 0 );
#endif
} // End of ResgisterWindow for GUIMDIFRAME
BOOLEAN GUIMDIFRAME::Create ( STRING Title, LONG x, LONG y, LONG Wd, LONG Ht,
GUIWINDOW *Parent )
{
PreRegister ();
RegisterWindow ();
NewMDIFrame = this;
ParentWindow = Parent;
HWINDOW hParent;
HWINDOW hNew;
#if defined (__FORWINDOWS__)
if (Parent==NULL)
hParent = HDESKTOP;
else
hParent = Parent->GetClient ();
#if defined (__FORWIN386__)
if (WinExStyle==0)
hWindow = CreateWindow ( ClassName, Title, WinStyle, (short)x, (short)y,
(short)Wd, (short)Ht, hParent, NULL,
hInstance, NULL );
else
hWindow = CreateWindowEx ( WinExStyle, ClassName, Title, WinStyle, (short)x, (short)y,
(short)Wd, (short)Ht,
hParent, NULL, hInstance, NULL );
#else
if (WinExStyle==0)
hWindow = CreateWindow ( ClassName, Title, WinStyle, x, y, Wd, Ht, hParent, NULL,
hInstance, NULL );
else
hWindow = CreateWindowEx ( WinExStyle, ClassName, Title, WinStyle, x, y, Wd, Ht,
hParent, NULL, hInstance, NULL );
#endif
hNew = hWindow;
AddWindow ( this, hNew );
NewMDIFrame = NULL;
CLIENTCREATESTRUCT CliCreate;
CliCreate.hWindowMenu = NULL;
CliCreate.idFirstChild = 100;
hClient = CreateWindow ( "MDICLIENT", NULL, GUI_WIN_CHILD | GUI_WIN_VISIBLE | WS_CLIPCHILDREN,
0, 0, 0, 0, hWindow, 0, hInstance, (LPSTR)(&CliCreate) );
#elif defined (__FOROS2__)
if (Parent==NULL)
hParent = HDESKTOP;
else
hParent = Parent->GetClient ();
ULONG CreateFlag = WinExStyle;
hWindow = WinCreateStdWindow ( hParent, WinStyle, &CreateFlag, ClassName,
Title, 0, 0, 0, &hClient );
hNew = hClient;
AddWindow ( this, hNew );
NewMDIFrame = NULL;
if (x&y&Wd&Ht)
{}
#elif defined (__FORDOS__)
if (Title)
{}
if (x&y&Wd&Ht)
{}
if (Parent)
{}
if (hParent)
{}
if (hNew)
{}
#elif defined (__FORUNIX__)
if (Title)
{}
if (x&y&Wd&Ht)
{}
if (Parent)
{}
if (hParent)
{}
if (hNew)
{}
#if defined (__FORMOTIF__)
INT NumArgs;
Arg MainAttrList[4];
Widget WinWidget;
XtSetArg ( MainAttrList[0], XmNwidth, Wd );
XtSetArg ( MainAttrList[1], XmNheight, Ht );
XtSetArg ( MainAttrList[2], XmNx, x );
XtSetArg ( MainAttrList[3], XmNy, y );
WinWidget = XtAppInitialize ( &XtApp, Title,
NULL, 0, &NumArgs, NULL, NULL,
MainAttrList, 2 );
XtRealizeWidget ( WinWidget );
MainXDisplay = XtDisplay ( WinWidget );
hWindow = XtWindow ( WinWidget );
hClient = hWindow;
hNew = hClient;
AddWindow ( this, hNew );
NewMDIFrame = NULL;
#endif
#endif
return SUCCESS;
} // End of Create for GUIMDIFRAME
LONG GUIMDIFRAME::WndProc ( HWINDOW hWnd, MESSAGE iMessage, PARAM1 Param1, PARAM2 Param2, BOOLEAN FromClient )
{
LONG Result;
hWindow = hWnd;
if (Param1)
{}
if (Param2)
{}
if (FromClient)
{}
Result = 0;
switch (iMessage)
{
case GUI_WM_CREATE :
Result = OnCreate ();
break;
case GUI_WM_CLOSE :
Result = OnClose ();
break;
case GUI_WM_DESTROY :
Result = OnDestroy ();
DiscardWindow ( hWindow );
break;
case GUI_WM_PAINT :
ResetClientArea ();
#if defined (__FORWINDOWS__)
PAINTSTRUCT Ps;
HDISPLAY hDisplay;
hDisplay = BeginPaint ( hWindow, &Ps );
Result = OnPaint ( hDisplay );
EndPaint ( hWindow, &Ps );
#elif defined (__FOROS2__)
HDISPLAY hDisplay;
hDisplay = WinBeginPaint ( hWindow, NULLHANDLE, NULL );
Result = OnPaint ( hDisplay );
WinEndPaint ( hDisplay );
#elif defined (__FORDOS__)
Result = OnPaint ( 0 );
#endif
break;
case GUI_WM_COMMAND :
#if defined (__FORWINDOWS__)
Result = OnCommand ( Param1 );
if (Result==0)
{
HWINDOW hChild;
hChild = (HWINDOW)LOWORD ( SendMessage ( hClient, WM_MDIGETACTIVE,
0, 0 ) );
if (IsWindow(hChild))
Result = SendMessage ( hChild, GUI_WM_COMMAND, Param1, Param2 );
} // End if
#elif defined (__FOROS2__)
Result = OnCommand ( COMMANDMSG(&iMessage)->cmd );
#endif
break;
case GUI_WM_ACTIVATE :
LONG ActiveFlags;
BOOLEAN Minimized;
ActiveFlags = LOWORD((LONG)Param1);
Minimized = HIWORD((LONG)Param1);
Result = OnActivate ( ActiveFlags, Minimized );
break;
case GUI_WM_KEYDOWN :
Result = OnKeyDown ( (LONG)Param1 );
break;
case GUI_WM_KEYUP :
Result = OnKeyUp ( (LONG)Param1 );
break;
case GUI_WM_MOUSEMOVE :
case GUI_WM_LBUTTONDOWN :
case GUI_WM_LBUTTONUP :
case GUI_WM_LBUTTONDBLCLK :
case GUI_WM_MBUTTONDOWN :
case GUI_WM_MBUTTONUP :
case GUI_WM_MBUTTONDBLCLK :
case GUI_WM_RBUTTONDOWN :
case GUI_WM_RBUTTONUP :
case GUI_WM_RBUTTONDBLCLK :
LONG Mx, My;
LONG Flags;
#if defined (__FORWINDOWS__)
Flags = (LONG)Param1;
Mx = LOWORD ( Param2 );
My = HIWORD ( Param2 );
if (FromClient)
Result = OnMouse ( iMessage, Flags, Mx, My );
#elif defined (__FOROS2__)
if (Mx&My&Flags)
{}
#elif defined (__FORDOS__)
if (Mx&My&Flags)
{}
#endif
break;
case GUI_WM_SIZE :
ResetClientArea ();
Result = OnSize ( LOWORD (Param2), HIWORD (Param2) );
break;
case GUI_WM_TIMER :
Result = OnTimer ();
break;
case GUI_WM_VSCROLL :
#if defined (__FORWINDOWS__)
Result = OnScroll ( SBAR_VERT, (LONG)Param1, LOWORD((LONG)Param2));
#endif
break;
case GUI_WM_HSCROLL :
#if defined (__FORWINDOWS__)
Result = OnScroll ( SBAR_HORZ, Param1, LOWORD(Param2));
#endif
break;
case GUI_WM_POSCHANGING :
#if defined (__FORWINDOWS__)
WINPOSCHANGE Wpc;
WINDOWPOS FAR *lpwp;
#if defined (__FORWIN386__)
lpwp = (WINDOWPOS FAR*)MK_FP(Param2>>16,Param2&0xFFFF);
#else
lpwp = (WINDOWPOS FAR*)Param2;
#endif
Wpc.xPos = lpwp->x;
Wpc.yPos = lpwp->y;
Wpc.Width = lpwp->cx;
Wpc.Height = lpwp->cy;
Wpc.Flags = lpwp->flags;
Result = OnPosChanging ( &Wpc );
#if defined (__FORWIN386__)
lpwp->x = (short)Wpc.xPos;
lpwp->y = (short)Wpc.yPos;
lpwp->cx = (short)Wpc.Width;
lpwp->cy = (short)Wpc.Height;
lpwp->flags = Wpc.Flags;
#else
lpwp->x = Wpc.xPos;
lpwp->y = Wpc.yPos;
lpwp->cx = Wpc.Width;
lpwp->cy = Wpc.Height;
lpwp->flags = Wpc.Flags;
#endif
#endif
break;
default :
Result = UserProc ( iMessage, Param1, Param2 );
break;
} // End switch
return Result;
} // End of WndProc for GUIMDIFRAME
//****************************************************
//
// MDI Frame Window Procedure
//
//****************************************************
APIRESULT APIPROC GUIMDIFrameProc ( HWINDOW hWindow, MESSAGE iMessage,
PARAM1 Param1, PARAM2 Param2 )
{
LONG Result;
HWINDOW hWndClient=0;
GUIWINDOW *WinPtr;
if (hWndClient)
{}
Result = 0;
WinPtr = FindWindow ( hWindow );
if (WinPtr==NULL)
{
if (NewMDIFrame!=NULL)
{
Result = NewMDIFrame->WndProc ( hWindow, iMessage, Param1, Param2, FALSE );
hWndClient = NewMDIFrame->GetClient ();
} // End if
} // End if
else
{
Result = WinPtr->WndProc ( hWindow, iMessage, Param1, Param2, FALSE );
hWndClient = WinPtr->GetClient ();
} // End else
if (Result!=0)
return 0;
#if defined (__FORWINDOWS__)
return DefFrameProc ( hWindow, hWndClient, iMessage, Param1, Param2 );
#elif defined (__FOROS2__)
return WinDefWindowProc ( hWindow, iMessage, Param1, Param2 );
#elif defined (__FORDOS__)
if (hWindow&iMessage&Param1&Param2&hWndClient)
{}
return 0;
#endif
} // End of GUIMDIFrameProc