Files
Work/common/Mdifrm.hpp
2024-08-07 09:09:36 -04:00

134 lines
3.8 KiB
C++

#ifndef _COMMON_MDIFRM_HPP_
#define _COMMON_MDIFRM_HPP_
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_PUREMENU_HPP_
#include <common/puremenu.hpp>
#endif
#ifndef _COMMON_GUIWINDOW_HPP_
#include <common/guiwnd.hpp>
#endif
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _COMMON_ARRAY_HPP_
#include <common/array.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
class MDIWindow;
class FrameWindow : public GUIWindow
{
public:
FrameWindow(void);
virtual ~FrameWindow();
void createWindow(const String &className,const String &windowName=String(),const String &menuName=String(),const String &iconName=String());
Window &getClient(void);
bool getActive(SmartPointer<MDIWindow> &mdiWindow);
bool getDocument(const String &strWindowName,SmartPointer<MDIWindow> &mdiWindow);
bool getDocuments(Array<SmartPointer<MDIWindow> > &mdiWindows);
bool getDocumentClass(const String &strClassName,SmartPointer<MDIWindow> &mdiWindow);
void enableMenuItems(UINT menuIndex,UINT itemID,PureMenu::PositionFlags positionFlags,PureMenu::InsertFlags insertFlags);
PureMenu &getFrameMenu(void);
void insert(MDIWindow &mdiWindow);
MDIWindow &operator[](int winIndex);
void destroy(void);
int size(void)const;
void cascade(void)const;
void tile(void)const;
void arrange(void)const;
void closeAll(void)const;
void restoreAll(void)const;
void minimizeAll(void)const;
BOOL activate(UINT childIndex);
protected:
virtual bool preDestroy(MDIWindow &mdiWindow);
virtual void preRegister(WNDCLASS &wndClass);
virtual void mdiDestroy(MDIWindow &mdiWindow);
virtual void mdiDeactivate(MDIWindow &mdiWindow);
virtual void mdiActivate(MDIWindow &mdiWindow);
virtual void moreWindows(void);
private:
enum{IDFirstMDIChild=100};
enum{MDICloseAll,MDIRestoreAll,MDIMinimizeAll};
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType mdiActivateHandler(CallbackData &someCallackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
FrameWindow(const FrameWindow &frameWindow);
FrameWindow &operator=(const FrameWindow &frameWindow);
int windowProcedure(HWND hWnd,WORD message,WPARAM wParam,LPARAM lParam);
void registerClass(HINSTANCE hInstance,const String &className,const String &iconName);
void createMDIClientWindow(void);
void watchDocumentWindows(void);
#if defined(_MSC_VER)
__declspec(dllexport) static int FAR PASCAL enumerateProcedure(HWND hWnd,LPARAM lParam);
#else
static int FAR PASCAL _export enumerateProcedure(HWND hWnd,LPARAM lParam);
#endif
PureMenu mFrameMenu;
Window mClientWnd;
Callback<FrameWindow> mDestroyHandler;
Callback<FrameWindow> mMDIActivateHandler;
Callback<FrameWindow> mCommandHandler;
Block<SmartPointer<MDIWindow> > mDocuments;
};
inline
Window &FrameWindow::getClient(void)
{
return mClientWnd;
}
inline
PureMenu &FrameWindow::getFrameMenu(void)
{
return mFrameMenu;
}
inline
void FrameWindow::cascade(void)const
{
if(!mClientWnd.isValid())return;
mClientWnd.sendMessage(WM_MDICASCADE,0,0L);
}
inline
void FrameWindow::tile(void)const
{
if(!mClientWnd.isValid())return;
mClientWnd.sendMessage(WM_MDITILE,0,0L);
}
inline
void FrameWindow::arrange(void)const
{
if(!mClientWnd.isValid())return;
mClientWnd.sendMessage(WM_MDIICONARRANGE,0,0L);
}
inline
void FrameWindow::closeAll(void)const
{
::EnumChildWindows(mClientWnd,(WNDENUMPROC)enumerateProcedure,MAKELONG(MDICloseAll,0));
}
inline
void FrameWindow::minimizeAll(void)const
{
::EnumChildWindows(mClientWnd,(WNDENUMPROC)enumerateProcedure,MAKELONG(MDIMinimizeAll,0));
mClientWnd.sendMessage(WM_MDIICONARRANGE,0,0L);
}
inline
void FrameWindow::restoreAll(void)const
{
::EnumChildWindows(mClientWnd,(WNDENUMPROC)enumerateProcedure,MAKELONG(MDIRestoreAll,0));
mClientWnd.sendMessage(WM_MDICASCADE,0,0L);
}
#endif