#include MDIWindow::MDIWindow() : mhWnd(0) { } MDIWindow::~MDIWindow() { if(GetHandle())::DestroyWindow(GetHandle()); } long FAR PASCAL _export MDIWindow::MDIWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { MDIWindow *pWindow=MDIWindow::GetPointer(hWnd); if(pWindow) { long retCode=pWindow->WndProc(message,wParam,lParam); if(WM_NCDESTROY==message) { MDIWindow::SetPointer(hWnd,0); pWindow->SetHandle(0); } return retCode; } if(message==WM_NCCREATE) { ::DefMDIChildProc(hWnd,message,wParam,lParam); LPCREATESTRUCT lpcs=(LPCREATESTRUCT)lParam; LPMDICREATESTRUCT lpcm=(LPMDICREATESTRUCT)lpcs->lpCreateParams; pWindow=(MDIWindow *)lpcm->lParam; if(!pWindow)return FALSE; MDIWindow::SetPointer(hWnd,pWindow); pWindow->SetHandle(hWnd); return pWindow->WndProc(message,wParam,lParam); } else return ::DefMDIChildProc(hWnd,message,wParam,lParam); }