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

📄 utils.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// Restore cursor to normalvoid wxEndBusyCursor(){    wxCHECK_RET( gs_wxBusyCursorCount > 0,        wxT("no matching wxBeginBusyCursor() for wxEndBusyCursor()") );    if (--gs_wxBusyCursorCount == 0)    {        gMacStoredActiveCursor.MacInstall();        gMacStoredActiveCursor = wxNullCursor;    }}// true if we're between the above two callsbool wxIsBusy(){    return (gs_wxBusyCursorCount > 0);}#endif // wxUSE_GUI#if wxUSE_BASEwxString wxMacFindFolderNoSeparator( short        vol,              OSType       folderType,              Boolean      createFolder){    FSRef fsRef;    wxString strDir;    if ( FSFindFolder( vol, folderType, createFolder, &fsRef) == noErr)    {        strDir = wxMacFSRefToPath( &fsRef );    }    return strDir;}wxString wxMacFindFolder( short        vol,              OSType       folderType,              Boolean      createFolder){    return wxMacFindFolderNoSeparator(vol, folderType, createFolder) + wxFILE_SEP_PATH;}#endif // wxUSE_BASE#if wxUSE_GUI// Check whether this window wants to process messages, e.g. Stop button// in long calculations.bool wxCheckForInterrupt(wxWindow *wnd){    // TODO    return false;}void wxGetMousePosition( int* x, int* y ){    Point pt;#if wxMAC_USE_CORE_GRAPHICS    GetGlobalMouse(&pt);#else    GetMouse( &pt );    LocalToGlobal( &pt );#endif    *x = pt.h;    *y = pt.v;};// Return true if we have a colour displaybool wxColourDisplay(){    return true;}// Returns depth of screenint wxDisplayDepth(){    int theDepth = 8;#if wxMAC_USE_CORE_GRAPHICS    theDepth = (int) CGDisplayBitsPerPixel(CGMainDisplayID());#else    Rect globRect;    SetRect(&globRect, -32760, -32760, 32760, 32760);    GDHandle    theMaxDevice;    theMaxDevice = GetMaxDevice(&globRect);    if (theMaxDevice != NULL)        theDepth = (**(**theMaxDevice).gdPMap).pixelSize;#endif    return theDepth;}// Get size of displayvoid wxDisplaySize(int *width, int *height){#if wxMAC_USE_CORE_GRAPHICS    // TODO adapt for multi-displays    CGRect bounds = CGDisplayBounds(CGMainDisplayID());    if ( width )        *width = (int)bounds.size.width ;    if ( height )        *height = (int)bounds.size.height;#else    BitMap screenBits;    GetQDGlobalsScreenBits( &screenBits );    if (width != NULL)        *width = screenBits.bounds.right - screenBits.bounds.left;    if (height != NULL)        *height = screenBits.bounds.bottom - screenBits.bounds.top;#endif}void wxDisplaySizeMM(int *width, int *height){    wxDisplaySize(width, height);    // on mac 72 is fixed (at least now;-)    float cvPt2Mm = 25.4 / 72;    if (width != NULL)        *width = int( *width * cvPt2Mm );    if (height != NULL)        *height = int( *height * cvPt2Mm );}void wxClientDisplayRect(int *x, int *y, int *width, int *height){#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5        HIRect bounds ;        HIWindowGetAvailablePositioningBounds(kCGNullDirectDisplay,kHICoordSpace72DPIGlobal,            &bounds);    if ( x )        *x = bounds.origin.x;    if ( y )        *y = bounds.origin.y;    if ( width )        *width = bounds.size.width;    if ( height )        *height = bounds.size.height;#else    Rect r;    GetAvailableWindowPositioningBounds( GetMainDevice() , &r );    if ( x )        *x = r.left;    if ( y )        *y = r.top;    if ( width )        *width = r.right - r.left;    if ( height )        *height = r.bottom - r.top;#endif}wxWindow* wxFindWindowAtPoint(const wxPoint& pt){    return wxGenericFindWindowAtPoint(pt);}#endif // wxUSE_GUI#if wxUSE_BASEwxString wxGetOsDescription(){#ifdef WXWIN_OS_DESCRIPTION    // use configure generated description if available    return wxString(wxT("MacOS (")) + wxT(WXWIN_OS_DESCRIPTION) + wxString(wxT(")"));#else    return wxT("MacOS"); //TODO:define further#endif}#ifndef __DARWIN__wxChar *wxGetUserHome (const wxString& user){    // TODO    return NULL;}bool wxGetDiskSpace(const wxString& path, wxDiskspaceSize_t *pTotal, wxDiskspaceSize_t *pFree){    if ( path.empty() )        return false;    wxString p = path;    if (p[0u] == ':' )      p = wxGetCwd() + p;    int pos = p.Find(':');    if ( pos != wxNOT_FOUND )      p = p.Mid(1,pos);    p = p + wxT(":");    OSErr err = noErr;    FSRef fsRef;    err = wxMacPathToFSRef( p , &fsRef );    if ( noErr == err )    {        FSVolumeRefNum vRefNum;        err = FSGetVRefNum( &fsRef , &vRefNum );        if ( noErr == err )        {            UInt64 freeBytes , totalBytes;            err = FSGetVInfo( vRefNum , NULL , &freeBytes , &totalBytes );            if ( noErr == err )            {                if ( pTotal )                    *pTotal = wxDiskspaceSize_t( totalBytes );                if ( pFree )                    *pFree = wxDiskspaceSize_t( freeBytes );            }        }    }    return err == noErr;}#endif // !__DARWIN__//---------------------------------------------------------------------------// wxMac Specific utility functions//---------------------------------------------------------------------------void wxMacStringToPascal( const wxString&from , StringPtr to ){    wxCharBuffer buf = from.mb_str( wxConvLocal );    int len = strlen(buf);    if ( len > 255 )        len = 255;    to[0] = len;    memcpy( (char*) &to[1] , buf , len );}wxString wxMacMakeStringFromPascal( ConstStringPtr from ){    return wxString( (char*) &from[1] , wxConvLocal , from[0] );}// ----------------------------------------------------------------------------// Common Event Support// ----------------------------------------------------------------------------extern ProcessSerialNumber gAppProcess;void wxMacWakeUp(){    ProcessSerialNumber psn;    Boolean isSame;    psn.highLongOfPSN = 0;    psn.lowLongOfPSN = kCurrentProcess;    SameProcess( &gAppProcess , &psn , &isSame );    if ( isSame )    {#if TARGET_CARBON        OSStatus err = noErr;#if 0        // lead sometimes to race conditions, although all calls used should be thread safe ...        static wxMacCarbonEvent s_wakeupEvent;        if ( !s_wakeupEvent.IsValid() )        {           err = s_wakeupEvent.Create( 'WXMC', 'WXMC', GetCurrentEventTime(),                        kEventAttributeNone );        }        if ( err == noErr )        {            if ( IsEventInQueue( GetMainEventQueue() , s_wakeupEvent ) )                return;            s_wakeupEvent.SetCurrentTime();            err = PostEventToQueue(GetMainEventQueue(), s_wakeupEvent,                                  kEventPriorityHigh );        }#else        wxMacCarbonEvent wakeupEvent;        wakeupEvent.Create( 'WXMC', 'WXMC', GetCurrentEventTime(),                            kEventAttributeNone );        err = PostEventToQueue(GetMainEventQueue(), wakeupEvent,                               kEventPriorityHigh );#endif#else        PostEvent( nullEvent , 0 );#endif    }    else    {        WakeUpProcess( &gAppProcess );    }}#endif // wxUSE_BASE#if wxUSE_GUI// ----------------------------------------------------------------------------// Native Struct Conversions// ----------------------------------------------------------------------------void wxMacRectToNative( const wxRect *wx , Rect *n ){    n->left = wx->x;    n->top = wx->y;    n->right = wx->x + wx->width;    n->bottom = wx->y + wx->height;}void wxMacNativeToRect( const Rect *n , wxRect* wx ){    wx->x = n->left;    wx->y = n->top;    wx->width = n->right - n->left;    wx->height = n->bottom - n->top;}void wxMacPointToNative( const wxPoint* wx , Point *n ){    n->h = wx->x;    n->v = wx->y;}void wxMacNativeToPoint( const Point *n , wxPoint* wx ){    wx->x = n->h;    wx->y = n->v;}// ----------------------------------------------------------------------------// Carbon Event Support// ----------------------------------------------------------------------------OSStatus wxMacCarbonEvent::GetParameter(EventParamName inName, EventParamType inDesiredType, UInt32 inBufferSize, void * outData){    return ::GetEventParameter( m_eventRef , inName , inDesiredType , NULL , inBufferSize , NULL , outData );}OSStatus wxMacCarbonEvent::SetParameter(EventParamName inName, EventParamType inType, UInt32 inBufferSize, const void * inData){    return ::SetEventParameter( m_eventRef , inName , inType , inBufferSize , inData );}// ----------------------------------------------------------------------------// Control Access Support// ----------------------------------------------------------------------------IMPLEMENT_DYNAMIC_CLASS( wxMacControl , wxObject )wxMacControl::wxMacControl() {    Init();}wxMacControl::wxMacControl(wxWindow* peer , bool isRootControl ){    Init();    m_peer = peer;    m_isRootControl = isRootControl;}wxMacControl::wxMacControl( wxWindow* peer , ControlRef control ){    Init();    m_peer = peer;    m_controlRef = control;}wxMacControl::wxMacControl( wxWindow* peer , WXWidget control ){    Init();    m_peer = peer;    m_controlRef = (ControlRef) control;}wxMacControl::~wxMacControl(){}void wxMacControl::Init(){    m_peer = NULL;    m_controlRef = NULL;    m_needsFocusRect = false;    m_isRootControl = false;}void wxMacControl::Dispose(){    wxASSERT_MSG( IsValidControlHandle(m_controlRef) , wxT("Invalid Control Handle (maybe already released) in Dispose") );    // we cannot check the ref count here anymore, as autorelease objects might delete their refs later    CFRelease(m_controlRef);    m_controlRef = NULL;}void wxMacControl::SetReference( URefCon data ){    SetControlReference( m_controlRef , data );}OSStatus wxMacControl::GetData(ControlPartCode inPartCode , ResType inTag , Size inBufferSize , void * inOutBuffer , Size * outActualSize ) const{    return ::GetControlData( m_controlRef , inPartCode , inTag , inBufferSize , inOutBuffer , outActualSize );}OSStatus wxMacControl::GetDataSize(ControlPartCode inPartCode , ResType inTag , Size * outActualSize ) const{    return ::GetControlDataSize( m_controlRef , inPartCode , inTag , outActualSize );}OSStatus wxMacControl::SetData(ControlPartCode inPartCode , ResType inTag , Size inSize , const void * inData){    return ::SetControlData( m_controlRef , inPartCode , inTag , inSize , inData );}OSStatus wxMacControl::SendEvent( EventRef event , OptionBits inOptions ){#if TARGET_API_MAC_OSX    return SendEventToEventTargetWithOptions( event,        HIObjectGetEventTarget( (HIObjectRef) m_controlRef ), inOptions );#else    #pragma unused(inOptions)    return SendEventToEventTarget(event,GetControlEventTarget( m_controlRef ) );#endif}OSStatus wxMacControl::SendHICommand( HICommand &command , OptionBits inOptions ){    wxMacCarbonEvent event( kEventClassCommand , kEventCommandProcess );    event.SetParameter<HICommand>(kEventParamDirectObject,command);    return SendEvent( event , inOptions );}OSStatus wxMacControl::SendHICommand( UInt32 commandID , OptionBits inOptions  ){    HICommand command;    memset( &command, 0 , sizeof(command) );    command.commandID = commandID;    return SendHICommand( command , inOptions );}void wxMacControl::Flash( ControlPartCode part , UInt32 ticks ){    unsigned long finalTicks;    HiliteControl( m_controlRef , part );    Delay( ticks , &finalTicks );    HiliteControl( m_controlRef , kControlNoPart );}SInt32 wxMacControl::GetValue() const{    return ::GetControl32BitValue( m_controlRef );}SInt32 wxMacControl::GetMaximum() const{    return ::GetControl32BitMaximum( m_controlRef );}SInt32 wxMacControl::GetMinimum() const{    return ::GetControl32BitMinimum( m_controlRef );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -