⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toplevel.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        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 + -