#include "main.h"
#include "mdi.h"
#include "resource.h"
#ifdef LOG
#include <xlog.h>
#endif
bool InitMDI( void )
{
WNDCLASS wc;
memset(&wc,0,sizeof(WNDCLASS));
wc.lpfnWndProc = (WNDPROC)MDIWndProc;
wc.style = CS_HREDRAW|CS_VREDRAW |CS_DBLCLKS ;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.lpszMenuName = (LPCTSTR) NULL;
wc.lpszClassName = MDI_CHILD_CLASS;
wc.hIcon = LoadIcon(NULL,MAKEINTRESOURCE(IDI_ICON));
if ( !RegisterClass(&wc))
return FALSE;
return TRUE;
}
HWND CreateClientWnd(void)
{
CLIENTCREATESTRUCT c;
c.hWindowMenu = (HANDLE)GetSubMenu(GetMenu(hWindow), 2);
c.idFirstChild = IDM_WINDOWCHILD;
return CreateWindow("MDICLIENT", (LPCTSTR)NULL, WS_CHILD|WS_CLIPCHILDREN|WS_VSCROLL,
0,0,0,0,
hWindow,
NULL,
hInstance,
(LPSTR) &c);
}
HWND APIENTRY NewChild( TCHAR *pName )
{
HWND hwnd;
TCHAR sz[160];
MDICREATESTRUCT mcs;
if ( !pName || pName[0] == '\0' )
{
LoadString(hInstance, IDS_UNTITLED, sz, sizeof(sz)/sizeof(TCHAR));
mcs.szTitle = (LPCTSTR)sz;
}
else
{
strcpy(sz,pName);
mcs.szTitle = (LPCTSTR)sz;
}
mcs.szClass = (LPCTSTR)MDI_CHILD_CLASS;
mcs.hOwner = hInstance;
mcs.x = mcs.cx = CW_USEDEFAULT;
mcs.y = mcs.cy = CW_USEDEFAULT;
mcs.style = WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_CAPTION|WS_CLIPSIBLINGS|WS_SYSMENU|WS_OVERLAPPED|WS_VISIBLE|WS_CHILD;
hwnd = (HWND) SendMessage(hClient, WM_MDICREATE, 0, (LONG)(LPMDICREATESTRUCT) &mcs);
ShowWindow(hwnd,SW_SHOW);
return hwnd;
}
void cleanup_children( void )
{
HWND h;
while ( (h = get_active()) != (HWND)NULL )
kill_child(h);
}
LRESULT CALLBACK MDIWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg)
{
case WM_CHILDACTIVATE:
DefMDIChildProc(hwnd,msg,wParam,lParam);
break;
case WM_GETMINMAXINFO:
DefMDIChildProc(hwnd,msg,wParam,lParam);
break;
case WM_MENUCHAR:
DefMDIChildProc(hwnd,msg,wParam,lParam);
break;
case WM_MOVE:
DefMDIChildProc(hwnd,msg,wParam,lParam);
break;
case WM_SETFOCUS:
DefMDIChildProc(hwnd,msg,wParam,lParam);
break;
case WM_SIZE:
DefMDIChildProc(hwnd,msg,wParam,lParam);
break;
case WM_SYSCOMMAND:
DefMDIChildProc(hwnd,msg,wParam,lParam);
break;
default:
return DefMDIChildProc(hwnd,msg,wParam,lParam);
}
return 0;
}
bool kill_child( HWND c )
{
if ( c == NULL )
return FALSE;
SendMessage( hClient, (UINT)WM_MDINEXT, (WPARAM)(HWND)c, 1 ); SendMessage( hClient, (UINT)WM_MDIDESTROY, (WPARAM)(HWND)c, 0 );
return TRUE;
}
HWND get_active( void )
{
HWND h = (HWND)SendMessage( hClient, (UINT)WM_MDIGETACTIVE, 0, (LPARAM)NULL );
if ( h == (HWND)NULL )
return (HWND)NULL;
return h;
}