📄 toplevel.cpp
字号:
case kEventWindowShown : toplevelWindow->Refresh() ; result = noErr ; break ; case kEventWindowClose : toplevelWindow->Close() ; result = noErr ; break ; case kEventWindowBoundsChanged : err = GetEventParameter( event, kEventParamAttributes, typeUInt32, NULL, sizeof( UInt32 ), NULL, &attributes ); if ( err == noErr ) { Rect newContentRect ; GetEventParameter( event, kEventParamCurrentBounds, typeQDRectangle, NULL, sizeof( newContentRect ), NULL, &newContentRect ); toplevelWindow->SetSize( newContentRect.left , newContentRect.top , newContentRect.right - newContentRect.left , newContentRect.bottom - newContentRect.top, wxSIZE_USE_EXISTING); result = noErr; } break ; case kEventWindowBoundsChanging : err = GetEventParameter( event, kEventParamAttributes, typeUInt32, NULL, sizeof( UInt32 ), NULL, &attributes ); if ( err == noErr ) { Rect newContentRect ; GetEventParameter( event, kEventParamCurrentBounds, typeQDRectangle, NULL, sizeof( newContentRect ), NULL, &newContentRect ); wxSize formerSize = toplevelWindow->GetSize() ; if ( (attributes & kWindowBoundsChangeSizeChanged ) || ( attributes & kWindowBoundsChangeOriginChanged ) ) toplevelWindow->SetSize( newContentRect.left , newContentRect.top , newContentRect.right - newContentRect.left , newContentRect.bottom - newContentRect.top, wxSIZE_USE_EXISTING); int x , y , w , h ; toplevelWindow->GetPosition( &x , &y ) ; toplevelWindow->GetSize( &w , &h ) ; Rect adjustedRect = { y , x , y + h , x + w } ; if ( !EqualRect( &newContentRect , &adjustedRect ) ) { SetEventParameter( event , kEventParamCurrentBounds , typeQDRectangle, sizeof( adjustedRect ) , &adjustedRect ) ; } if ( toplevelWindow->GetSize() != formerSize ) toplevelWindow->Update() ; result = noErr ; } break ; default : break ; } return result ;}pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef event , void *data ){ OSStatus result = eventNotHandledErr ; switch ( GetEventClass( event ) ) { case kEventClassKeyboard : result = KeyboardEventHandler( handler, event , data ) ; break ; case kEventClassTextInput : result = TextInputEventHandler( handler, event , data ) ; break ; case kEventClassWindow : result = WindowEventHandler( handler, event , data ) ; break ; case kEventClassMouse : result = MouseEventHandler( handler, event , data ) ; break ; default : break ; } return result ;}DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacWindowEventHandler )#endif// ---------------------------------------------------------------------------// wxWindowMac utility functions// ---------------------------------------------------------------------------// Find an item given the Macintosh Window ReferencewxList *wxWinMacWindowList = NULL;wxTopLevelWindowMac *wxFindWinFromMacWindow(WXWindow inWindowRef){ if ( wxWinMacWindowList == NULL ) return NULL ; wxNode *node = wxWinMacWindowList->Find((long)inWindowRef); if (!node) return NULL; return (wxTopLevelWindowMac *)node->GetData();}void wxAssociateWinWithMacWindow(WindowRef inWindowRef, wxTopLevelWindowMac *win);void wxAssociateWinWithMacWindow(WindowRef inWindowRef, wxTopLevelWindowMac *win){ // adding NULL WindowRef is (first) surely a result of an error and // (secondly) breaks menu command processing wxCHECK_RET( inWindowRef != (WindowRef) NULL, wxT("attempt to add a NULL WindowRef to window list") ); if ( !wxWinMacWindowList->Find((long)inWindowRef) ) wxWinMacWindowList->Append((long)inWindowRef, win);}void wxRemoveMacWindowAssociation(wxTopLevelWindowMac *win){ wxWinMacWindowList->DeleteObject(win);}// ----------------------------------------------------------------------------// wxTopLevelWindowMac creation// ----------------------------------------------------------------------------WXWindow wxTopLevelWindowMac::s_macWindowInUpdate = NULL;wxTopLevelWindowMac *wxTopLevelWindowMac::s_macDeactivateWindow = NULL;bool wxTopLevelWindowMac::s_macWindowCompositing = false;void wxTopLevelWindowMac::Init(){ m_iconized = m_maximizeOnShow = false; m_macNoEraseUpdateRgn = NewRgn() ; m_macNeedsErasing = false ; m_macWindow = NULL ; m_macUsesCompositing = false ;#if TARGET_CARBON m_macEventHandler = NULL ;#endif}class wxMacDeferredWindowDeleter : public wxObject{public : wxMacDeferredWindowDeleter( WindowRef windowRef ) { m_macWindow = windowRef ; } virtual ~wxMacDeferredWindowDeleter() { UMADisposeWindow( (WindowRef) m_macWindow ) ; } protected : WindowRef m_macWindow ;} ;bool wxTopLevelWindowMac::Create(wxWindow *parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name){ // init our fields Init(); m_windowStyle = style; SetName(name); m_windowId = id == -1 ? NewControlId() : id; wxTopLevelWindows.Append(this); if ( parent ) parent->AddChild(this); return true;}wxTopLevelWindowMac::~wxTopLevelWindowMac(){ if ( m_macWindow ) { wxToolTip::NotifyWindowDelete(m_macWindow) ; wxPendingDelete.Append( new wxMacDeferredWindowDeleter( (WindowRef) m_macWindow ) ) ; }#if TARGET_CARBON if ( m_macEventHandler ) { ::RemoveEventHandler((EventHandlerRef) m_macEventHandler); m_macEventHandler = NULL ; }#endif wxRemoveMacWindowAssociation( this ) ; if ( wxModelessWindows.Find(this) ) wxModelessWindows.DeleteObject(this); DisposeRgn( (RgnHandle) m_macNoEraseUpdateRgn ) ;}// ----------------------------------------------------------------------------// wxTopLevelWindowMac maximize/minimize// ----------------------------------------------------------------------------void wxTopLevelWindowMac::Maximize(bool maximize){ wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) m_macWindow) ) ; wxMacWindowClipper clip (this); ZoomWindow( (WindowRef)m_macWindow , maximize ? inZoomOut : inZoomIn , false ) ; Rect tempRect ; GrafPtr port ; GetPort( &port ) ; Point pt = { 0, 0 } ; SetPortWindowPort((WindowRef)m_macWindow) ; LocalToGlobal( &pt ) ; SetPort( port ) ; GetWindowPortBounds((WindowRef)m_macWindow, &tempRect ) ; SetSize( pt.h , pt.v , tempRect.right-tempRect.left , tempRect.bottom-tempRect.top, wxSIZE_USE_EXISTING);}bool wxTopLevelWindowMac::IsMaximized() const{ return IsWindowInStandardState( (WindowRef)m_macWindow , NULL , NULL ) ;}void wxTopLevelWindowMac::Iconize(bool iconize){ if ( IsWindowCollapsable((WindowRef)m_macWindow) ) CollapseWindow((WindowRef)m_macWindow , iconize ) ;}bool wxTopLevelWindowMac::IsIconized() const{ return IsWindowCollapsed((WindowRef)m_macWindow ) ;}void wxTopLevelWindowMac::Restore(){ // not available on mac}// ----------------------------------------------------------------------------// wxTopLevelWindowMac misc// ----------------------------------------------------------------------------void wxTopLevelWindowMac::SetIcon(const wxIcon& icon){ // this sets m_icon wxTopLevelWindowBase::SetIcon(icon);}void wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ){ OSStatus err = noErr ; SetName(name); m_windowStyle = style; m_isShown = false; // create frame. Rect theBoundsRect; m_x = (int)pos.x; m_y = (int)pos.y; if ( m_y < 50 ) m_y = 50 ; if ( m_x < 20 ) m_x = 20 ; m_width = WidthDefault(size.x); m_height = HeightDefault(size.y); ::SetRect(&theBoundsRect, m_x, m_y , m_x + m_width, m_y + m_height); // translate the window attributes in the appropriate window class and attributes WindowClass wclass = 0; WindowAttributes attr = kWindowNoAttributes ; if ( HasFlag( wxFRAME_TOOL_WINDOW) ) { if ( HasFlag( wxMINIMIZE_BOX ) || HasFlag( wxMAXIMIZE_BOX ) || HasFlag( wxSYSTEM_MENU ) || HasFlag( wxCAPTION ) || HasFlag(wxTINY_CAPTION_HORIZ) || HasFlag(wxTINY_CAPTION_VERT) ) { wclass = kFloatingWindowClass ; if ( HasFlag(wxTINY_CAPTION_VERT) ) { attr |= kWindowSideTitlebarAttribute ; } } else {#if TARGET_CARBON wclass = kPlainWindowClass ;#else wclass = kFloatingWindowClass ;#endif } } else if ( HasFlag( wxCAPTION ) ) { wclass = kDocumentWindowClass ; } else { if ( HasFlag( wxMINIMIZE_BOX ) || HasFlag( wxMAXIMIZE_BOX ) || HasFlag( wxCLOSE_BOX ) || HasFlag( wxSYSTEM_MENU ) ) { wclass = kDocumentWindowClass ; } else {#if TARGET_CARBON wclass = kPlainWindowClass ;#else wclass = kModalWindowClass ;#endif } } if ( HasFlag( wxMINIMIZE_BOX ) ) { attr |= kWindowCollapseBoxAttribute ; } if ( HasFlag( wxMAXIMIZE_BOX ) ) { attr |= kWindowFullZoomAttribute ; } if ( HasFlag( wxRESIZE_BORDER ) ) { attr |= kWindowResizableAttribute ; } if ( HasFlag( wxCLOSE_BOX) ) { attr |= kWindowCloseBoxAttribute ; } if (UMAGetSystemVersion() >= 0x1000) { //turn on live resizing (OS X only) attr |= kWindowLiveResizeAttribute; }#if TARGET_CARBON
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -