X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d427503c3696486ef84cd0e5081884ccd8d6b434..c94ad3c365a7a2b12346258f3d6b26432f36fd8d:/src/msw/frame.cpp?ds=sidebyside diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index c71be7552c..91ccc08d19 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -43,7 +43,7 @@ extern wxWindowList wxModelessWindows; extern wxList WXDLLEXPORT wxPendingDelete; -extern char wxFrameClassName[]; +extern wxChar wxFrameClassName[]; extern wxMenu *wxCurrentPopupMenu; #if !USE_SHARED_LIBRARY @@ -86,9 +86,6 @@ bool wxFrame::Create(wxWindow *parent, m_hwndToolTip = 0; #endif - if (!parent) - wxTopLevelWindows.Append(this); - SetName(name); m_windowStyle = style; m_frameMenuBar = NULL; @@ -119,6 +116,9 @@ bool wxFrame::Create(wxWindow *parent, if ((m_windowStyle & wxFRAME_FLOAT_ON_PARENT) == 0) parent = NULL; + if (!parent) + wxTopLevelWindows.Append(this); + MSWCreate(m_windowId, parent, wxFrameClassName, this, title, x, y, width, height, style); @@ -241,28 +241,11 @@ void wxFrame::DoGetPosition(int *x, int *y) const void wxFrame::DoSetSize(int x, int y, int width, int height, int sizeFlags) { - int currentX, currentY; - int x1 = x; - int y1 = y; - int w1 = width; - int h1 = height; - - GetPosition(¤tX, ¤tY); - if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - x1 = currentX; - if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - y1 = currentY; + wxWindow::DoSetSize(x, y, width, height, sizeFlags); - int ww,hh ; - GetSize(&ww,&hh) ; - if (width == -1) w1 = ww ; - if (height==-1) h1 = hh ; - - MoveWindow(GetHwnd(), x1, y1, w1, h1, (BOOL)TRUE); - - wxSizeEvent event(wxSize(width, height), m_windowId); - event.SetEventObject( this ); - GetEventHandler()->ProcessEvent(event); + wxSizeEvent event(wxSize(width, height), m_windowId); + event.SetEventObject( this ); + GetEventHandler()->ProcessEvent(event); } bool wxFrame::Show(bool show) @@ -384,7 +367,7 @@ wxStatusBar* wxFrame::CreateStatusBar(int number, long style, wxWindowID id, { // VZ: calling CreateStatusBar twice is an error - why anyone would do it? wxCHECK_MSG( m_frameStatusBar == NULL, FALSE, - "recreating status bar in wxFrame" ); + _T("recreating status bar in wxFrame") ); m_frameStatusBar = OnCreateStatusBar(number, style, id, name); @@ -399,14 +382,14 @@ wxStatusBar* wxFrame::CreateStatusBar(int number, long style, wxWindowID id, void wxFrame::SetStatusText(const wxString& text, int number) { - wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set text for" ); + wxCHECK_RET( m_frameStatusBar != NULL, _T("no statusbar to set text for") ); m_frameStatusBar->SetStatusText(text, number); } void wxFrame::SetStatusWidths(int n, const int widths_field[]) { - wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set widths for" ); + wxCHECK_RET( m_frameStatusBar != NULL, _T("no statusbar to set widths for") ); m_frameStatusBar->SetStatusWidths(n, widths_field); PositionStatusBar(); @@ -441,7 +424,7 @@ void wxFrame::SetMenuBar(wxMenuBar *menu_bar) return; } - wxCHECK_RET( !menu_bar->GetFrame(), "this menubar is already attached" ); + wxCHECK_RET( !menu_bar->GetFrame(), _T("this menubar is already attached") ); if (m_frameMenuBar) delete m_frameMenuBar; @@ -487,7 +470,7 @@ void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event) * */ -bool wxFrame::MSWCreate(int id, wxWindow *parent, const char *wclass, wxWindow *wx_win, const char *title, +bool wxFrame::MSWCreate(int id, wxWindow *parent, const wxChar *wclass, wxWindow *wx_win, const wxChar *title, int x, int y, int width, int height, long style) { @@ -609,17 +592,29 @@ void wxFrame::OnSize(wxSizeEvent& event) // subwindow found. void wxFrame::OnActivate(wxActivateEvent& event) { - for(wxNode *node = GetChildren().First(); node; node = node->Next()) - { - // Find a child that's a subwindow, but not a dialog box. - wxWindow *child = (wxWindow *)node->Data(); - if (!child->IsKindOf(CLASSINFO(wxFrame)) && - !child->IsKindOf(CLASSINFO(wxDialog))) + for ( wxWindowList::Node *node = GetChildren().GetFirst(); + node; + node = node->GetNext() ) { - child->SetFocus(); - return; + // FIXME all this is totally bogus - we need to do the same as wxPanel, + // but how to do it without duplicating the code? + + // restore focus + wxWindow *child = node->GetData(); + + if ( !child->IsTopLevel() +#if wxUSE_TOOLBAR + && !wxDynamicCast(child, wxToolBar) +#endif // wxUSE_TOOLBAR +#if wxUSE_STATUSBAR + && !wxDynamicCast(child, wxStatusBar) +#endif // wxUSE_STATUSBAR + ) + { + child->SetFocus(); + return; + } } - } } // The default implementation for the close window event. @@ -732,7 +727,7 @@ void wxFrame::ClientToScreen(int *x, int *y) const wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name) { wxCHECK_MSG( m_frameToolBar == NULL, FALSE, - "recreating toolbar in wxFrame" ); + _T("recreating toolbar in wxFrame") ); wxToolBar* toolBar = OnCreateToolBar(style, id, name); if (toolBar) @@ -834,10 +829,7 @@ bool wxFrame::MSWTranslateMessage(WXMSG* pMsg) return FALSE; const wxAcceleratorTable& acceleratorTable = menuBar->GetAccelTable(); - return acceleratorTable.Ok() && - ::TranslateAccelerator(GetHwnd(), - GetTableHaccel(acceleratorTable), - (MSG *)pMsg); + return acceleratorTable.Translate(this, pMsg); } // --------------------------------------------------------------------------- @@ -851,7 +843,7 @@ bool wxFrame::HandlePaint() { if ( m_iconized ) { - HICON hIcon = m_icon.Ok() ? GetIconHicon(m_icon) + HICON hIcon = m_icon.Ok() ? GetHiconOf(m_icon) : (HICON)m_defaultIcon; // Hold a pointer to the dc so long as the OnPaint() message @@ -1047,7 +1039,7 @@ long wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) case WM_QUERYDRAGICON: { - HICON hIcon = m_icon.Ok() ? GetIconHicon(m_icon) + HICON hIcon = m_icon.Ok() ? GetHiconOf(m_icon) : (HICON)(m_defaultIcon); rc = (long)hIcon; processed = rc != 0;