1///////////////////////////////////////////////////////////////////////////////
2// Name:        wx/msw/toplevel.h
3// Purpose:     wxTopLevelWindowMSW is the MSW implementation of wxTLW
4// Author:      Vadim Zeitlin
5// Modified by:
6// Created:     20.09.01
7// RCS-ID:      $Id: toplevel.h 50999 2008-01-03 01:13:44Z VZ $
8// Copyright:   (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
9// Licence:     wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_MSW_TOPLEVEL_H_
13#define _WX_MSW_TOPLEVEL_H_
14
15// ----------------------------------------------------------------------------
16// wxTopLevelWindowMSW
17// ----------------------------------------------------------------------------
18
19class WXDLLEXPORT wxTopLevelWindowMSW : public wxTopLevelWindowBase
20{
21public:
22    // constructors and such
23    wxTopLevelWindowMSW() { Init(); }
24
25    wxTopLevelWindowMSW(wxWindow *parent,
26                        wxWindowID id,
27                        const wxString& title,
28                        const wxPoint& pos = wxDefaultPosition,
29                        const wxSize& size = wxDefaultSize,
30                        long style = wxDEFAULT_FRAME_STYLE,
31                        const wxString& name = wxFrameNameStr)
32    {
33        Init();
34
35        (void)Create(parent, id, title, pos, size, style, name);
36    }
37
38    bool Create(wxWindow *parent,
39                wxWindowID id,
40                const wxString& title,
41                const wxPoint& pos = wxDefaultPosition,
42                const wxSize& size = wxDefaultSize,
43                long style = wxDEFAULT_FRAME_STYLE,
44                const wxString& name = wxFrameNameStr);
45
46    virtual ~wxTopLevelWindowMSW();
47
48    // implement base class pure virtuals
49    virtual void SetTitle( const wxString& title);
50    virtual wxString GetTitle() const;
51    virtual void Maximize(bool maximize = true);
52    virtual bool IsMaximized() const;
53    virtual void Iconize(bool iconize = true);
54    virtual bool IsIconized() const;
55    virtual void SetIcon(const wxIcon& icon);
56    virtual void SetIcons(const wxIconBundle& icons );
57    virtual void Restore();
58
59    virtual void SetLayoutDirection(wxLayoutDirection dir);
60
61#ifndef __WXWINCE__
62    virtual bool SetShape(const wxRegion& region);
63#endif // __WXWINCE__
64    virtual void RequestUserAttention(int flags = wxUSER_ATTENTION_INFO);
65
66    virtual bool Show(bool show = true);
67
68    virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
69    virtual bool IsFullScreen() const { return m_fsIsShowing; }
70
71    // wxMSW only: EnableCloseButton(false) may be used to remove the "Close"
72    // button from the title bar
73    virtual bool EnableCloseButton(bool enable = true);
74
75    // Set window transparency if the platform supports it
76    virtual bool SetTransparent(wxByte alpha);
77    virtual bool CanSetTransparent();
78
79
80    // implementation from now on
81    // --------------------------
82
83    // event handlers
84    void OnActivate(wxActivateEvent& event);
85
86    // called by wxWindow whenever it gets focus
87    void SetLastFocus(wxWindow *win) { m_winLastFocused = win; }
88    wxWindow *GetLastFocus() const { return m_winLastFocused; }
89
90#if defined(__SMARTPHONE__) && defined(__WXWINCE__)
91    virtual void SetLeftMenu(int id = wxID_ANY, const wxString& label = wxEmptyString, wxMenu *subMenu = NULL);
92    virtual void SetRightMenu(int id = wxID_ANY, const wxString& label = wxEmptyString, wxMenu *subMenu = NULL);
93    bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control);
94    virtual bool MSWShouldPreProcessMessage(WXMSG* pMsg);
95#endif // __SMARTPHONE__ && __WXWINCE__
96
97#if defined(__SMARTPHONE__) || defined(__POCKETPC__)
98    // Soft Input Panel (SIP) change notification
99    virtual bool HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam);
100#endif
101
102    // translate wxWidgets flags to Windows ones
103    virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle) const;
104
105    // choose the right parent to use with CreateWindow()
106    virtual WXHWND MSWGetParent() const;
107
108    // window proc for the frames
109    WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
110
111protected:
112    // common part of all ctors
113    void Init();
114
115    // create a new frame, return false if it couldn't be created
116    bool CreateFrame(const wxString& title,
117                     const wxPoint& pos,
118                     const wxSize& size);
119
120    // create a new dialog using the given dialog template from resources,
121    // return false if it couldn't be created
122    bool CreateDialog(const void *dlgTemplate,
123                      const wxString& title,
124                      const wxPoint& pos,
125                      const wxSize& size);
126
127    // common part of Iconize(), Maximize() and Restore()
128    void DoShowWindow(int nShowCmd);
129
130    // is the window currently iconized?
131    bool m_iconized;
132
133    // should the frame be maximized when it will be shown? set by Maximize()
134    // when it is called while the frame is hidden
135    bool m_maximizeOnShow;
136
137    // Data to save/restore when calling ShowFullScreen
138    long                  m_fsStyle; // Passed to ShowFullScreen
139    wxRect                m_fsOldSize;
140    long                  m_fsOldWindowStyle;
141    bool                  m_fsIsMaximized;
142    bool                  m_fsIsShowing;
143
144    // the last focused child: we restore focus to it on activation
145    wxWindow             *m_winLastFocused;
146
147#if defined(__SMARTPHONE__) && defined(__WXWINCE__)
148    class ButtonMenu
149    {
150    public:
151        ButtonMenu();
152        ~ButtonMenu();
153
154        void SetButton(int id = wxID_ANY,
155                       const wxString& label  = wxEmptyString,
156                       wxMenu *subMenu = NULL);
157
158        bool IsAssigned() const {return m_assigned;}
159        bool IsMenu() const {return m_menu!=NULL;}
160
161        int GetId() const {return m_id;}
162        wxMenu* GetMenu() const {return m_menu;}
163        wxString GetLabel() {return m_label;}
164
165        static wxMenu *DuplicateMenu(wxMenu *menu);
166
167    protected:
168        int      m_id;
169        wxString m_label;
170        wxMenu  *m_menu;
171        bool     m_assigned;
172    };
173
174    ButtonMenu               m_LeftButton;
175    ButtonMenu               m_RightButton;
176    HWND                     m_MenuBarHWND;
177
178    void ReloadButton(ButtonMenu& button, UINT menuID);
179    void ReloadAllButtons();
180#endif // __SMARTPHONE__ && __WXWINCE__
181
182private:
183    // helper of SetIcons(): calls gets the icon with the size specified by the
184    // given system metrics (SM_C{X|Y}[SM]ICON) from the bundle and sets it
185    // using WM_SETICON with the specified wParam (ICOM_SMALL or ICON_BIG)
186    void DoSelectAndSetIcon(const wxIconBundle& icons, int smX, int smY, int i);
187
188
189#if defined(__SMARTPHONE__) || defined(__POCKETPC__)
190    void* m_activateInfo;
191#endif
192
193    DECLARE_EVENT_TABLE()
194    DECLARE_NO_COPY_CLASS(wxTopLevelWindowMSW)
195};
196
197#endif // _WX_MSW_TOPLEVEL_H_
198