// ----------------------------------------------------------------------------
extern wxWindowList wxModelessWindows;
-extern wxList WXDLLEXPORT wxPendingDelete;
extern const wxChar *wxFrameClassName;
#if wxUSE_MENUS_NATIVE
EVT_SYS_COLOUR_CHANGED(wxFrameMSW::OnSysColourChanged)
END_EVENT_TABLE()
-IMPLEMENT_DYNAMIC_CLASS(wxFrameMSW, wxWindow)
+#ifndef __WXUNIVERSAL__
+ IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow)
+#endif
// ============================================================================
// implementation
{
SetName(name);
m_windowStyle = style;
-#if wxUSE_MENUS
- m_frameMenuBar = NULL;
-#endif // wxUSE_MENUS
-#if wxUSE_TOOLBAR
- m_frameToolBar = NULL;
-#endif // wxUSE_TOOLBAR
-#if wxUSE_STATUSBAR
- m_frameStatusBar = NULL;
-#endif // wxUSE_STATUSBAR
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE));
wxTopLevelWindows.Append(this);
- MSWCreate(m_windowId, parent, wxFrameClassName, this, title,
+ // the frame must have NULL parent HWND or it would be always on top of its
+ // parent which is not what we usually want (in fact, we only want it for
+ // frames with the special wxFRAME_TOOL_WINDOW style handled elsewhere)
+ MSWCreate(m_windowId, NULL, wxFrameClassName, this, title,
x, y, width, height, style);
wxModelessWindows.Append(this);
return TRUE;
}
+void wxFrameMSW::Raise()
+{
+#ifdef __WIN16__
+ // no SetForegroundWindow() in Win16
+ wxFrameBase::Raise();
+#else // Win32
+ ::SetForegroundWindow(GetHwnd());
+#endif // Win16/32
+}
+
void wxFrameMSW::Iconize(bool iconize)
{
DoShowWindow(iconize ? SW_MINIMIZE : SW_RESTORE);
bool wxFrameMSW::IsIconized() const
{
+#ifdef __WXMICROWIN__
+ // TODO
+ return FALSE;
+#else
((wxFrameMSW *)this)->m_iconized = (::IsIconic(GetHwnd()) != 0);
return m_iconized;
+#endif
}
// Is it maximized?
bool wxFrameMSW::IsMaximized() const
{
+#ifdef __WXMICROWIN__
+ // TODO
+ return FALSE;
+#else
return (::IsZoomed(GetHwnd()) != 0);
+#endif
}
void wxFrameMSW::SetIcon(const wxIcon& icon)
{
wxFrameBase::SetIcon(icon);
-#if defined(__WIN95__)
+#if defined(__WIN95__) && !defined(__WXMICROWIN__)
if ( m_icon.Ok() )
{
SendMessage(GetHwnd(), WM_SETICON,
}
// generate an artificial resize event
-void wxFrame::SendSizeEvent()
+void wxFrameMSW::SendSizeEvent()
{
RECT r;
#ifdef __WIN16__
}
#endif // wxUSE_STATUSBAR
-void wxFrameMSW::DetachMenuBar()
-{
-#if wxUSE_MENUS
- if ( m_frameMenuBar )
- {
- m_frameMenuBar->Detach();
- m_frameMenuBar = NULL;
- }
-#endif // wxUSE_MENUS
-}
+#if wxUSE_MENUS_NATIVE
-void wxFrameMSW::SetMenuBar(wxMenuBar *menubar)
+void wxFrameMSW::AttachMenuBar(wxMenuBar *menubar)
{
-#if wxUSE_MENUS
- // detach the old menu bar in any case
- DetachMenuBar();
+ wxFrameBase::AttachMenuBar(menubar);
-#if wxUSE_MENUS_NATIVE
if ( !menubar )
{
// actually remove the menu from the frame
{
m_hMenu = menubar->GetHMenu();
}
- else
+ else // no HMENU yet
{
- if (menubar->IsAttached())
- menubar->Detach();
-
m_hMenu = menubar->Create();
if ( !m_hMenu )
+ {
+ wxFAIL_MSG( _T("failed to create menu bar") );
return;
+ }
}
InternalSetMenuBar();
}
-#endif // wxUSE_MENUS_NATIVE
-
- if ( menubar )
- {
- m_frameMenuBar = menubar;
- menubar->Attach((wxFrame *)this);
- }
-#endif // wxUSE_MENUS
}
-#if wxUSE_MENUS_NATIVE
-
void wxFrameMSW::InternalSetMenuBar()
{
+#ifndef __WXMICROWIN__
if ( !::SetMenu(GetHwnd(), (HMENU)m_hMenu) )
{
wxLogLastError(wxT("SetMenu"));
}
+#endif
}
#endif // wxUSE_MENUS_NATIVE
}
#endif // wxUSE_TOOLBAR
+#ifndef __WXMICROWIN__
if (style & wxFULLSCREEN_NOMENUBAR)
SetMenu((HWND)GetHWND(), (HMENU) NULL);
+#endif
#if wxUSE_STATUSBAR
wxStatusBar *theStatusBar = GetStatusBar();
LONG offFlags = 0;
if (style & wxFULLSCREEN_NOBORDER)
- offFlags |= WS_BORDER;
+ offFlags |= WS_BORDER | WS_THICKFRAME;
if (style & wxFULLSCREEN_NOCAPTION)
offFlags |= (WS_CAPTION | WS_SYSMENU);
}
#endif // wxUSE_STATUSBAR
+#ifndef __WXMICROWIN__
if ((m_fsStyle & wxFULLSCREEN_NOMENUBAR) && (m_hMenu != 0))
SetMenu((HWND)GetHWND(), (HMENU)m_hMenu);
+#endif
Maximize(m_fsIsMaximized);
SetWindowLong((HWND)GetHWND(),GWL_STYLE, m_fsOldWindowStyle);
// the child MDI frames are a special case and should not be touched by
// the parent frame - instead, they are managed by the user
- wxFrameMSW *frame = wxDynamicCast(win, wxFrameMSW);
+ wxFrameMSW *frame = wxDynamicCast(win, wxFrame);
if ( frame
#if wxUSE_MDI_ARCHITECTURE
&& !wxDynamicCast(frame, wxMDIChildFrame)
RECT rect;
if ( GetUpdateRect(GetHwnd(), &rect, FALSE) )
{
+#ifndef __WXMICROWIN__
if ( m_iconized )
{
HICON hIcon = m_icon.Ok() ? GetHiconOf(m_icon)
return TRUE;
}
else
+ #endif
{
return wxWindow::HandlePaint();
}
bool wxFrameMSW::HandleSize(int x, int y, WXUINT id)
{
bool processed = FALSE;
+#ifndef __WXMICROWIN__
switch ( id )
{
m_iconized = TRUE;
break;
}
+#endif
if ( !m_iconized )
{
// menu was removed from screen
item = -1;
}
+#ifndef __WXMICROWIN__
else if ( !(flags & MF_POPUP) && !(flags & MF_SEPARATOR) )
{
item = nItem;
}
+#endif
else
{
#if wxUSE_STATUSBAR
}
break;
+#ifndef __WXMICROWIN__
case WM_MENUSELECT:
{
WXWORD item, flags;
processed = HandleMenuSelect(item, flags, hmenu);
}
break;
+#endif
case WM_PAINT:
processed = HandlePaint();
break;
+#ifndef __WXMICROWIN__
case WM_QUERYDRAGICON:
{
HICON hIcon = m_icon.Ok() ? GetHiconOf(m_icon)
processed = rc != 0;
}
break;
+#endif
case WM_SIZE:
processed = HandleSize(LOWORD(lParam), HIWORD(lParam), wParam);