bool wxNonOwnedWindow::Create(wxWindow *parent, wxWindowID id, const wxPoint& posOrig, const wxSize& sizeOrig, long style, const wxString& name) { m_windowStyle = style; SetName( name ); m_windowId = id == -1 ? NewControlId() : id; m_windowStyle = style; m_isShown = false; // use the appropriate defaults for the position and size if necessary wxSize size(sizeOrig); if ( !size.IsFullySpecified() ) size.SetDefaults(wxTopLevelWindow::GetDefaultSize()); wxPoint pos(posOrig); if ( !pos.IsFullySpecified() ) { wxRect rectWin = wxRect(size).CentreIn(wxGetClientDisplayRect()); // The size of the window is often not really known yet, TLWs are often // created with some small initial size and later are fitted to contain // their children so centering the window will show it too much to the // right and bottom, adjust for it by putting it more to the left and // center. rectWin.x /= 2; rectWin.y /= 2; pos.SetDefaults(rectWin.GetPosition()); } // create frame. m_nowpeer = wxNonOwnedWindowImpl::CreateNonOwnedWindow ( this, parent, pos , size, style, GetExtraStyle(), name ); wxNonOwnedWindowImpl::Associate( m_nowpeer->GetWXWindow() , m_nowpeer ) ; SetPeer(wxWidgetImpl::CreateContentView(this)); DoSetWindowVariant( m_windowVariant ) ; wxWindowCreateEvent event(this); HandleWindowEvent(event); SetBackgroundColour(wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE )); if ( parent ) parent->AddChild(this); return true; }
void wxControl::MacPostControlCreate() { wxASSERT_MSG( (ControlHandle) m_macControl != NULL , wxT("No valid mac control") ) ; DoSetWindowVariant( m_windowVariant ) ; /* if ( IsKindOf( CLASSINFO( wxScrollBar ) ) ) { // no font } else if ( !UMAHasAquaLayout() && (IsKindOf( CLASSINFO( wxStaticBox ) ) || IsKindOf( CLASSINFO( wxRadioBox ) ) || IsKindOf( CLASSINFO( wxButton ) ) ) ) { ControlFontStyleRec controlstyle ; controlstyle.flags = kControlUseFontMask ; controlstyle.font = kControlFontSmallBoldSystemFont ; ::SetControlFontStyle( (ControlHandle) m_macControl , &controlstyle ) ; } else { ControlFontStyleRec controlstyle ; controlstyle.flags = kControlUseFontMask ; if (IsKindOf( CLASSINFO( wxButton ) ) ) controlstyle.font = kControlFontBigSystemFont ; // eventually kControlFontBigSystemFont ; else controlstyle.font = kControlFontSmallSystemFont ; ::SetControlFontStyle( (ControlHandle) m_macControl , &controlstyle ) ; } */ ControlHandle container = (ControlHandle) GetParent()->MacGetContainerForEmbedding() ; wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ; ::EmbedControl( (ControlHandle) m_macControl , container ) ; m_macControlIsShown = MacIsReallyShown() ; wxAssociateControlWithMacControl( (ControlHandle) m_macControl , this ) ; if ( wxMacSetupControlBackgroundUPP == NULL ) { wxMacSetupControlBackgroundUPP = NewControlColorUPP( wxMacSetupControlBackground ) ; } if ( wxMacControlActionUPP == NULL ) { wxMacControlActionUPP = NewControlDefUPP( wxMacControlDefinition ) ; } // The following block of code is responsible for crashes when switching // back to windows, which can be seen in the dialogs sample. // It is disabled until a proper solution can be found. #if 0 #if TARGET_CARBON /* only working under classic carbon m_macControlAction = *(**(ControlHandle)m_macControl).contrlDefProc ; (**(ControlHandle)m_macControl).contrlDefProc = (Handle) &wxMacControlActionUPP ; */ #else m_macControlAction = *(**(ControlHandle)m_macControl).contrlDefProc ; cdefHandle cdef ; cdef = (cdefHandle) NewHandle( sizeof(cdefRec) ) ; if ( (**(ControlHandle)m_macControl).contrlDefProc != NULL ) { (**cdef).instruction = 0x4EF9; /* JMP instruction */ (**cdef).function = (void(*)()) wxMacControlActionUPP; (**(ControlHandle)m_macControl).contrlDefProc = (Handle) cdef ; } #endif #endif SetControlColorProc( (ControlHandle) m_macControl , wxMacSetupControlBackgroundUPP ) ; // Adjust the controls size and position wxPoint pos(m_x, m_y); wxSize best_size( DoGetBestSize() ); wxSize new_size( m_width, m_height ); m_x = m_y = m_width = m_height = -1; // Forces SetSize to move/size the control if (new_size.x == -1) { new_size.x = best_size.x; } if (new_size.y == -1) { new_size.y = best_size.y; } SetSize(pos.x, pos.y, new_size.x, new_size.y); #if wxUSE_UNICODE UMASetControlTitle( (ControlHandle) m_macControl , wxStripMenuCodes(m_label) , m_font.GetEncoding() ) ; #endif if ( m_macControlIsShown ) UMAShowControl( (ControlHandle) m_macControl ) ; SetCursor( *wxSTANDARD_CURSOR ) ; Refresh() ; }