1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: MDI (Multiple Document Interface) classes.
4 // This doesn't have to be implemented just like Windows,
5 // it could be a tabbed design as in wxGTK.
6 // Author: David Webster
10 // Copyright: (c) David Webster
11 // Licence: wxWindows licence
12 /////////////////////////////////////////////////////////////////////////////
19 WXDLLEXPORT_DATA(extern const char*) wxFrameNameStr
;
20 WXDLLEXPORT_DATA(extern const char*) wxStatusLineNameStr
;
22 class WXDLLEXPORT wxMDIClientWindow
;
23 class WXDLLEXPORT wxMDIChildFrame
;
25 class WXDLLEXPORT wxMDIParentFrame
: public wxFrame
27 DECLARE_DYNAMIC_CLASS(wxMDIParentFrame
)
29 friend class WXDLLEXPORT wxMDIChildFrame
;
33 inline wxMDIParentFrame(wxWindow
*parent
,
35 const wxString
& title
,
36 const wxPoint
& pos
= wxDefaultPosition
,
37 const wxSize
& size
= wxDefaultSize
,
38 long style
= wxDEFAULT_FRAME_STYLE
| wxVSCROLL
| wxHSCROLL
, // Scrolling refers to client window
39 const wxString
& name
= wxFrameNameStr
)
41 Create(parent
, id
, title
, pos
, size
, style
, name
);
46 bool Create(wxWindow
*parent
,
48 const wxString
& title
,
49 const wxPoint
& pos
= wxDefaultPosition
,
50 const wxSize
& size
= wxDefaultSize
,
51 long style
= wxDEFAULT_FRAME_STYLE
| wxVSCROLL
| wxHSCROLL
,
52 const wxString
& name
= wxFrameNameStr
);
57 // Get the active MDI child window (Windows only)
58 wxMDIChildFrame
*GetActiveChild() const;
60 // Get the client window
61 wxMDIClientWindow
*GetClientWindow() const { return m_clientWindow
; }
63 // Create the client window class (don't Create the window,
64 // just return a new class)
65 virtual wxMDIClientWindow
*OnCreateClient(void);
67 WXHMENU
GetWindowMenu() const { return m_windowMenu
; }
71 virtual void Cascade();
73 virtual void ArrangeIcons();
74 virtual void ActivateNext();
75 virtual void ActivatePrevious();
80 // Responds to colour changes
81 void OnSysColourChanged(wxSysColourChangedEvent
& event
);
83 void OnSize(wxSizeEvent
& event
);
85 bool HandleActivate(int state
, bool minimized
, WXHWND activate
);
86 bool HandleCommand(WXWORD id
, WXWORD cmd
, WXHWND control
);
88 // override window proc for MDI-specific message processing
89 virtual MRESULT
OS2WindowProc(WXUINT nMsg
, WXWPARAM wParam
, WXLPARAM lParam
);
91 virtual MRESULT
OS2DefWindowProc(WXUINT
, WXWPARAM
, WXLPARAM
);
92 virtual bool OS2TranslateMessage(WXMSG
* msg
);
95 virtual void InternalSetMenuBar();
97 wxMDIClientWindow
* m_clientWindow
;
98 wxMDIChildFrame
* m_currentChild
;
101 // TRUE if MDI Frame is intercepting commands, not child
102 bool m_parentFrameActive
;
105 DECLARE_EVENT_TABLE()
108 class WXDLLEXPORT wxMDIChildFrame
: public wxFrame
110 DECLARE_DYNAMIC_CLASS(wxMDIChildFrame
)
114 inline wxMDIChildFrame(wxMDIParentFrame
*parent
,
116 const wxString
& title
,
117 const wxPoint
& pos
= wxDefaultPosition
,
118 const wxSize
& size
= wxDefaultSize
,
119 long style
= wxDEFAULT_FRAME_STYLE
,
120 const wxString
& name
= wxFrameNameStr
)
122 Create(parent
, id
, title
, pos
, size
, style
, name
);
127 bool Create(wxMDIParentFrame
*parent
,
129 const wxString
& title
,
130 const wxPoint
& pos
= wxDefaultPosition
,
131 const wxSize
& size
= wxDefaultSize
,
132 long style
= wxDEFAULT_FRAME_STYLE
,
133 const wxString
& name
= wxFrameNameStr
);
136 virtual void Maximize(bool maximize
= TRUE
);
137 virtual void Restore();
138 virtual void Activate();
142 bool HandleMDIActivate(long bActivate
, WXHWND
, WXHWND
);
143 bool HandleSize(int x
, int y
, WXUINT
);
144 bool HandleWindowPosChanging(void *lpPos
);
145 bool HandleCommand(WXWORD id
, WXWORD cmd
, WXHWND control
);
147 virtual MRESULT
OS2WindowProc(WXUINT message
, WXWPARAM wParam
, WXLPARAM lParam
);
148 virtual MRESULT
OS2DefWindowProc(WXUINT message
, WXWPARAM wParam
, WXLPARAM lParam
);
149 virtual bool OS2TranslateMessage(WXMSG
*msg
);
151 virtual void OS2DestroyWindow();
154 bool ResetWindowStyle(void *vrect
);
157 virtual void DoGetPosition(int *x
, int *y
) const;
158 virtual void DoSetClientSize(int width
, int height
);
159 virtual void InternalSetMenuBar();
162 /* The client window is a child of the parent MDI frame, and itself
163 * contains the child MDI frames.
164 * However, you create the MDI children as children of the MDI parent:
165 * only in the implementation does the client window become the parent
166 * of the children. Phew! So the children are sort of 'adopted'...
169 class WXDLLEXPORT wxMDIClientWindow
: public wxWindow
171 DECLARE_DYNAMIC_CLASS(wxMDIClientWindow
)
175 wxMDIClientWindow() { Init(); }
176 wxMDIClientWindow(wxMDIParentFrame
*parent
, long style
= 0)
180 CreateClient(parent
, style
);
183 // Note: this is virtual, to allow overridden behaviour.
184 virtual bool CreateClient(wxMDIParentFrame
*parent
,
185 long style
= wxVSCROLL
| wxHSCROLL
);
187 // Explicitly call default scroll behaviour
188 void OnScroll(wxScrollEvent
& event
);
191 void Init() { m_scrollX
= m_scrollY
= 0; }
193 int m_scrollX
, m_scrollY
;
196 DECLARE_EVENT_TABLE()