| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: frame.h
- // Purpose: interface of wxFrame
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- Frame specific styles
- */
- #define wxFRAME_NO_TASKBAR 0x0002 // No taskbar button (MSW only)
- #define wxFRAME_TOOL_WINDOW 0x0004 // No taskbar button, no system menu
- #define wxFRAME_FLOAT_ON_PARENT 0x0008 // Always above its parent
- /**
- @class wxFrame
- A frame is a window whose size and position can (usually) be changed by the user.
- It usually has thick borders and a title bar, and can optionally contain a
- menu bar, toolbar and status bar. A frame can contain any window that is not
- a frame or dialog.
- A frame that has a status bar and toolbar, created via the CreateStatusBar() and
- CreateToolBar() functions, manages these windows and adjusts the value returned
- by GetClientSize() to reflect the remaining size available to application windows.
- @remarks An application should normally define an wxCloseEvent handler for the
- frame to respond to system close events, for example so that related
- data and subwindows can be cleaned up.
- @section frame_defaultevent Default event processing
- wxFrame processes the following events:
- @li @c wxEVT_SIZE: if the frame has exactly one child window, not counting the
- status and toolbar, this child is resized to take the entire frame client area.
- If two or more windows are present, they should be laid out explicitly either
- by manually handling @c wxEVT_SIZE or using sizers;
- @li @c wxEVT_MENU_HIGHLIGHT: the default implementation displays the help string
- associated with the selected item in the first pane of the status bar, if there is one.
- @beginStyleTable
- @style{wxDEFAULT_FRAME_STYLE}
- Defined as wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxRESIZE_BORDER |
- wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN.
- @style{wxICONIZE}
- Display the frame iconized (minimized). Windows only.
- @style{wxCAPTION}
- Puts a caption on the frame. Notice that this flag is required by
- wxMINIMIZE_BOX, wxMAXIMIZE_BOX and wxCLOSE_BOX on most systems as
- the corresponding buttons cannot be shown if the window has no title
- bar at all. I.e. if wxCAPTION is not specified those styles would be
- simply ignored.
- @style{wxMINIMIZE}
- Identical to wxICONIZE. Windows only.
- @style{wxMINIMIZE_BOX}
- Displays a minimize box on the frame.
- @style{wxMAXIMIZE}
- Displays the frame maximized. Windows and GTK+ only.
- @style{wxMAXIMIZE_BOX}
- Displays a maximize box on the frame. Notice that under wxGTK
- wxRESIZE_BORDER must be used as well or this style is ignored.
- @style{wxCLOSE_BOX}
- Displays a close box on the frame.
- @style{wxSTAY_ON_TOP}
- Stay on top of all other windows, see also wxFRAME_FLOAT_ON_PARENT.
- @style{wxSYSTEM_MENU}
- Displays a system menu containing the list of various windows
- commands in the window title bar. Unlike wxMINIMIZE_BOX,
- wxMAXIMIZE_BOX and wxCLOSE_BOX styles this style can be used without
- wxCAPTION, at least under Windows, and makes the system menu
- available without showing it on screen in this case. However it is
- recommended to only use it together with wxCAPTION for consistent
- behaviour under all platforms.
- @style{wxRESIZE_BORDER}
- Displays a resizable border around the window.
- @style{wxFRAME_TOOL_WINDOW}
- Causes a frame with a small title bar to be created; the frame does
- not appear in the taskbar under Windows or GTK+.
- @style{wxFRAME_NO_TASKBAR}
- Creates an otherwise normal frame but it does not appear in the
- taskbar under Windows or GTK+ (note that it will minimize to the
- desktop window under Windows which may seem strange to the users
- and thus it might be better to use this style only without
- wxMINIMIZE_BOX style). In wxGTK, the flag is respected only if the
- window manager supports _NET_WM_STATE_SKIP_TASKBAR hint.
- @style{wxFRAME_FLOAT_ON_PARENT}
- The frame will always be on top of its parent (unlike wxSTAY_ON_TOP).
- A frame created with this style must have a non-@NULL parent.
- @style{wxFRAME_SHAPED}
- Windows with this style are allowed to have their shape changed
- with the SetShape() method.
- @endStyleTable
- The default frame style is for normal, resizable frames.
- To create a frame which cannot be resized by user, you may use the following
- combination of styles:
- @code
- wxDEFAULT_FRAME_STYLE & ~(wxRESIZE_BORDER | wxMAXIMIZE_BOX)
- @endcode
- See also the @ref overview_windowstyles.
- @beginExtraStyleTable
- @style{wxFRAME_EX_CONTEXTHELP}
- Under Windows, puts a query button on the caption. When pressed,
- Windows will go into a context-sensitive help mode and wxWidgets
- will send a @c wxEVT_HELP event if the user clicked on an application
- window. Note that this is an extended style and must be set by
- calling SetExtraStyle before Create is called (two-step
- construction). You cannot use this style together with
- wxMAXIMIZE_BOX or wxMINIMIZE_BOX, so you should use
- wxDEFAULT_FRAME_STYLE ~ (wxMINIMIZE_BOX | wxMAXIMIZE_BOX) for the
- frames having this style (the dialogs don't have a minimize or a
- maximize box by default)
- @style{wxFRAME_EX_METAL}
- On Mac OS X, frames with this style will be shown with a metallic
- look. This is an extra style.
- @endExtraStyleTable
- @beginEventEmissionTable
- @event{EVT_CLOSE(func)}
- Process a @c wxEVT_CLOSE_WINDOW event when the frame is being
- closed by the user or programmatically (see wxWindow::Close).
- The user may generate this event clicking the close button
- (typically the 'X' on the top-right of the title bar) if it's present
- (see the @c wxCLOSE_BOX style). See wxCloseEvent.
- @event{EVT_ICONIZE(func)}
- Process a @c wxEVT_ICONIZE event. See wxIconizeEvent.
- @event{EVT_MENU_OPEN(func)}
- A menu is about to be opened. See wxMenuEvent.
- @event{EVT_MENU_CLOSE(func)}
- A menu has been just closed. See wxMenuEvent.
- @event{EVT_MENU_HIGHLIGHT(id, func)}
- The menu item with the specified id has been highlighted: used to show
- help prompts in the status bar by wxFrame. See wxMenuEvent.
- @event{EVT_MENU_HIGHLIGHT_ALL(func)}
- A menu item has been highlighted, i.e. the currently selected menu item has changed.
- See wxMenuEvent.
- @endEventTable
- @library{wxcore}
- @category{managedwnd}
- @see wxMDIParentFrame, wxMDIChildFrame, wxMiniFrame, wxDialog
- */
- class wxFrame : public wxTopLevelWindow
- {
- public:
- /**
- Default constructor.
- */
- wxFrame();
- /**
- Constructor, creating the window.
- @param parent
- The window parent. This may be @NULL. If it is non-@NULL, the frame will
- always be displayed on top of the parent window on Windows.
- @param id
- The window identifier. It may take a value of -1 to indicate a default value.
- @param title
- The caption to be displayed on the frame's title bar.
- @param pos
- The window position. The value wxDefaultPosition indicates a default position,
- chosen by either the windowing system or wxWidgets, depending on platform.
- @param size
- The window size. The value wxDefaultSize indicates a default size, chosen by
- either the windowing system or wxWidgets, depending on platform.
- @param style
- The window style. See wxFrame class description.
- @param name
- The name of the window. This parameter is used to associate a name with
- the item, allowing the application user to set Motif resource values for
- individual windows.
- @remarks For Motif, MWM (the Motif Window Manager) should be running for
- any window styles to work (otherwise all styles take effect).
- @see Create()
- */
- wxFrame(wxWindow* parent, wxWindowID id,
- const wxString& title,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDEFAULT_FRAME_STYLE,
- const wxString& name = wxFrameNameStr);
- /**
- Destructor. Destroys all child windows and menu bar if present.
- See @ref overview_windowdeletion for more info.
- */
- virtual ~wxFrame();
- /**
- Centres the frame on the display.
- @param direction
- The parameter may be wxHORIZONTAL, wxVERTICAL or wxBOTH.
- */
- void Centre(int direction = wxBOTH);
- /**
- Used in two-step frame construction.
- See wxFrame() for further details.
- */
- bool Create(wxWindow* parent, wxWindowID id, const wxString& title,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDEFAULT_FRAME_STYLE,
- const wxString& name = wxFrameNameStr);
- /**
- Creates a status bar at the bottom of the frame.
- @param number
- The number of fields to create. Specify a
- value greater than 1 to create a multi-field status bar.
- @param style
- The status bar style. See wxStatusBar for a list of valid styles.
- @param id
- The status bar window identifier. If -1, an identifier will be chosen
- by wxWidgets.
- @param name
- The status bar window name.
- @return A pointer to the status bar if it was created successfully, @NULL
- otherwise.
- @remarks The width of the status bar is the whole width of the frame
- (adjusted automatically when resizing), and the height
- and text size are chosen by the host windowing system.
- @see SetStatusText(), OnCreateStatusBar(), GetStatusBar()
- */
- virtual wxStatusBar* CreateStatusBar(int number = 1, long style = wxSTB_DEFAULT_STYLE,
- wxWindowID id = 0,
- const wxString& name = wxStatusBarNameStr);
- /**
- Creates a toolbar at the top or left of the frame.
- @param style
- The toolbar style. See wxToolBar for a list of valid styles.
- @param id
- The toolbar window identifier. If -1, an identifier will be chosen
- by wxWidgets.
- @param name
- The toolbar window name.
- @return A pointer to the toolbar if it was created successfully, @NULL
- otherwise.
- @remarks
- By default, the toolbar is an instance of wxToolBar.
- To use a different class, override OnCreateToolBar().
- When a toolbar has been created with this function, or made
- known to the frame with wxFrame::SetToolBar(), the frame will
- manage the toolbar position and adjust the return value from
- wxWindow::GetClientSize() to reflect the available space for
- application windows.
- Under Pocket PC, you should always use this function for creating
- the toolbar to be managed by the frame, so that wxWidgets can
- use a combined menubar and toolbar.
- Where you manage your own toolbars, create a wxToolBar as usual.
- @see CreateStatusBar(), OnCreateToolBar(), SetToolBar(), GetToolBar()
- */
- virtual wxToolBar* CreateToolBar(long style = wxTB_DEFAULT_STYLE,
- wxWindowID id = wxID_ANY,
- const wxString& name = wxToolBarNameStr);
- /**
- Returns the origin of the frame client area (in client coordinates).
- It may be different from (0, 0) if the frame has a toolbar.
- */
- virtual wxPoint GetClientAreaOrigin() const;
- /**
- Returns a pointer to the menubar currently associated with the frame (if any).
- @see SetMenuBar(), wxMenuBar, wxMenu
- */
- virtual wxMenuBar* GetMenuBar() const;
- /**
- Returns a pointer to the status bar currently associated with the frame
- (if any).
- @see CreateStatusBar(), wxStatusBar
- */
- virtual wxStatusBar* GetStatusBar() const;
- /**
- Returns the status bar pane used to display menu and toolbar help.
- @see SetStatusBarPane()
- */
- int GetStatusBarPane() const;
- /**
- Returns a pointer to the toolbar currently associated with the frame (if any).
- @see CreateToolBar(), wxToolBar, SetToolBar()
- */
- virtual wxToolBar* GetToolBar() const;
- /**
- Virtual function called when a status bar is requested by CreateStatusBar().
- @param number
- The number of fields to create.
- @param style
- The window style. See wxStatusBar for a list
- of valid styles.
- @param id
- The window identifier. If -1, an identifier will be chosen by
- wxWidgets.
- @param name
- The window name.
- @return A status bar object.
- @remarks An application can override this function to return a different
- kind of status bar. The default implementation returns
- an instance of wxStatusBar.
- @see CreateStatusBar(), wxStatusBar.
- */
- virtual wxStatusBar* OnCreateStatusBar(int number, long style,
- wxWindowID id,
- const wxString& name);
- /**
- Virtual function called when a toolbar is requested by CreateToolBar().
- @param style
- The toolbar style. See wxToolBar for a list
- of valid styles.
- @param id
- The toolbar window identifier. If -1, an identifier will be chosen by
- wxWidgets.
- @param name
- The toolbar window name.
- @return A toolbar object.
- @remarks An application can override this function to return a different
- kind of toolbar. The default implementation returns an
- instance of wxToolBar.
- @see CreateToolBar(), wxToolBar.
- */
- virtual wxToolBar* OnCreateToolBar(long style, wxWindowID id,
- const wxString& name);
- /**
- Simulate a menu command.
- @param id
- The identifier for a menu item.
- */
- bool ProcessCommand(int id);
- /**
- Tells the frame to show the given menu bar.
- @param menuBar
- The menu bar to associate with the frame.
- @remarks If the frame is destroyed, the menu bar and its menus will be
- destroyed also, so do not delete the menu bar
- explicitly (except by resetting the frame's menu bar to
- another frame or @NULL).
- Under Windows, a size event is generated, so be sure to
- initialize data members properly before calling SetMenuBar().
- Note that on some platforms, it is not possible to call this
- function twice for the same frame object.
- @see GetMenuBar(), wxMenuBar, wxMenu.
- */
- virtual void SetMenuBar(wxMenuBar* menuBar);
- /**
- Associates a status bar with the frame.
- If @a statusBar is @NULL, then the status bar, if present, is detached from
- the frame, but @e not deleted.
- @see CreateStatusBar(), wxStatusBar, GetStatusBar()
- */
- virtual void SetStatusBar(wxStatusBar* statusBar);
- /**
- Set the status bar pane used to display menu and toolbar help.
- Using -1 disables help display.
- */
- void SetStatusBarPane(int n);
- /**
- Sets the status bar text and redraws the status bar.
- @param text
- The text for the status field.
- @param number
- The status field (starting from zero).
- @remarks Use an empty string to clear the status bar.
- @see CreateStatusBar(), wxStatusBar
- */
- virtual void SetStatusText(const wxString& text, int number = 0);
- /**
- Sets the widths of the fields in the status bar.
- @param n
- The number of fields in the status bar. It must be the
- same used in CreateStatusBar.
- @param widths_field
- Must contain an array of n integers, each of which is a status field width
- in pixels. A value of -1 indicates that the field is variable width; at
- least one field must be -1. You should delete this array after calling
- SetStatusWidths().
- @remarks The widths of the variable fields are calculated from the total
- width of all fields, minus the sum of widths of the
- non-variable fields, divided by the number of variable fields.
- @beginWxPerlOnly
- In wxPerl this method takes the field widths as parameters.
- @endWxPerlOnly
- */
- virtual void SetStatusWidths(int n, const int* widths_field);
- /**
- Associates a toolbar with the frame.
- */
- virtual void SetToolBar(wxToolBar* toolBar);
- void PushStatusText(const wxString &text, int number = 0);
- void PopStatusText(int number = 0);
- };
|