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

📄 cursor.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    wxASSERT_MSG( hotSpotX >= 0 && hotSpotX < image_w &&                  hotSpotY >= 0 && hotSpotY < image_h,                  wxT("invalid cursor hot spot coordinates") );    wxImage image16(image); // final image of correct size    // if image is too small then place it in the center, resize it if too big    if ((w > image_w) && (h > image_h))    {        wxPoint offset((w - image_w) / 2, (h - image_h) / 2);        hotSpotX = hotSpotX + offset.x;        hotSpotY = hotSpotY + offset.y;        image16 = image.Size(wxSize(w, h), offset);    }    else if ((w != image_w) || (h != image_h))    {        hotSpotX = int(hotSpotX * double(w) / double(image_w));        hotSpotY = int(hotSpotY * double(h) / double(image_h));        image16 = image.Scale(w, h);    }    unsigned char * rgbBits = image16.GetData();    bool bHasMask = image16.HasMask() ;    PixMapHandle pm = (PixMapHandle) NewHandleClear( sizeof(PixMap) )  ;    short extent = 16 ;    short bytesPerPixel = 1 ;    short depth = 8 ;    Rect bounds = { 0 , 0 , extent , extent } ;    CCrsrHandle ch = (CCrsrHandle) NewHandleClear( sizeof(CCrsr) ) ;    CTabHandle newColors = GetCTable( 8 ) ;    HandToHand( (Handle *) &newColors );    // set the values to the indices    for ( int i = 0 ; i < (**newColors).ctSize ; ++i )    {        (**newColors).ctTable[i].value = i ;    }    HLock( (Handle)ch );    (**ch).crsrType = 0x8001; // color cursors    (**ch).crsrMap = pm;    short bytesPerRow = bytesPerPixel * extent;    (**pm).baseAddr = 0;    (**pm).rowBytes = bytesPerRow | 0x8000;    (**pm).bounds = bounds;    (**pm).pmVersion = 0;    (**pm).packType = 0;    (**pm).packSize = 0;    (**pm).hRes = 0x00480000; // 72 DPI default res    (**pm).vRes = 0x00480000; // 72 DPI default res    (**pm).pixelSize = depth;    (**pm).pixelType = 0;    (**pm).cmpCount = 1;    (**pm).cmpSize = depth;    (**pm).pmTable = newColors;    (**ch).crsrData = NewHandleClear( extent * bytesPerRow ) ;    (**ch).crsrXData = NULL ;    (**ch).crsrXValid = 0;    (**ch).crsrXHandle = NULL;    (**ch).crsrHotSpot.h = hotSpotX ;    (**ch).crsrHotSpot.v = hotSpotY ;    (**ch).crsrXTable = 0 ;    (**ch).crsrID = GetCTSeed() ;    memset( (**ch).crsr1Data  , 0 , sizeof( Bits16 ) ) ;    memset( (**ch).crsrMask , 0 , sizeof( Bits16 ) ) ;    unsigned char mr = image16.GetMaskRed() ;    unsigned char mg = image16.GetMaskGreen() ;    unsigned char mb = image16.GetMaskBlue() ;    for ( int y = 0 ; y < h ; ++y )    {        short rowbits = 0, maskbits = 0 ;        for ( int x = 0 ; x < w ; ++x )        {            long pos = (y * w + x) * 3;            unsigned char r = rgbBits[pos] ;            unsigned char g = rgbBits[pos + 1] ;            unsigned char b = rgbBits[pos + 2] ;            RGBColor col = { 0xFFFF, 0xFFFF, 0xFFFF } ;            if ( bHasMask && r == mr && g == mg && b == mb )            {                // masked area, does not appear anywhere            }            else            {                if ( (int)r + (int)g + (int)b < 0x0200 )                    rowbits |= ( 1 << (15 - x) ) ;                maskbits |= ( 1 << (15 - x) ) ;                col = *((RGBColor*) wxColor( r , g , b ).GetPixel()) ;            }            *((*(**ch).crsrData) + y * bytesPerRow + x) =                GetCTabIndex( newColors , &col) ;        }#ifdef WORDS_BIGENDIAN        (**ch).crsr1Data[y] = rowbits ;        (**ch).crsrMask[y] = maskbits ;#else        (**ch).crsr1Data[y] = CFSwapInt16(rowbits) ;        (**ch).crsrMask[y] = CFSwapInt16(maskbits) ;#endif    }    if ( !bHasMask )        memcpy( (**ch).crsrMask , (**ch).crsr1Data , sizeof( Bits16) ) ;    HUnlock( (Handle)ch ) ;    M_CURSORDATA->m_hCursor = ch ;    M_CURSORDATA->m_isColorCursor = true ;#endif}#endif //wxUSE_IMAGEwxCursor::wxCursor(const wxString& cursor_file, long flags, int hotSpotX, int hotSpotY){    m_refData = new wxCursorRefData;    if ( flags == wxBITMAP_TYPE_MACCURSOR_RESOURCE )    {#ifndef __LP64__        Str255 theName ;        wxMacStringToPascal( cursor_file , theName ) ;        Handle resHandle = ::GetNamedResource( 'crsr' , theName ) ;        if ( resHandle )        {            short theId = -1 ;            OSType theType ;            GetResInfo( resHandle , &theId , &theType , theName ) ;            ReleaseResource( resHandle ) ;            M_CURSORDATA->m_hCursor = GetCCursor( theId ) ;            if ( M_CURSORDATA->m_hCursor )                M_CURSORDATA->m_isColorCursor = true ;        }        else        {            Handle resHandle = ::GetNamedResource( 'CURS' , theName ) ;            if ( resHandle )            {                short theId = -1 ;                OSType theType ;                GetResInfo( resHandle , &theId , &theType , theName ) ;                ReleaseResource( resHandle ) ;                M_CURSORDATA->m_hCursor = GetCursor( theId ) ;                if ( M_CURSORDATA->m_hCursor )                    M_CURSORDATA->m_releaseHandle = true ;            }        }#endif    }    else    {#if wxUSE_IMAGE        wxImage image ;        image.LoadFile( cursor_file, flags ) ;        if ( image.Ok() )        {            image.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_X, hotSpotX ) ;            image.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_Y, hotSpotY ) ;            delete m_refData ;            CreateFromImage( image ) ;        }#endif    }}// Cursors by stock numberwxCursor::wxCursor(int cursor_type){    m_refData = new wxCursorRefData;    switch (cursor_type)    {    case wxCURSOR_COPY_ARROW:        M_CURSORDATA->m_themeCursor = kThemeCopyArrowCursor;        break;    case wxCURSOR_WAIT:        M_CURSORDATA->m_themeCursor = kThemeWatchCursor;        break;    case wxCURSOR_IBEAM:        M_CURSORDATA->m_themeCursor = kThemeIBeamCursor;        break;    case wxCURSOR_CROSS:        M_CURSORDATA->m_themeCursor = kThemeCrossCursor;        break;    case wxCURSOR_SIZENWSE:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorSizeNWSE);        break;    case wxCURSOR_SIZENESW:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorSizeNESW);        break;    case wxCURSOR_SIZEWE:        M_CURSORDATA->m_themeCursor = kThemeResizeLeftRightCursor;        break;    case wxCURSOR_SIZENS:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorSizeNS);        break;    case wxCURSOR_SIZING:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorSize);        break;    case wxCURSOR_HAND:        M_CURSORDATA->m_themeCursor = kThemePointingHandCursor;        break;    case wxCURSOR_BULLSEYE:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorBullseye);        break;    case wxCURSOR_PENCIL:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorPencil);        break;    case wxCURSOR_MAGNIFIER:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorMagnifier);        break;    case wxCURSOR_NO_ENTRY:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorNoEntry);        break;    case wxCURSOR_WATCH:        M_CURSORDATA->m_themeCursor = kThemeWatchCursor;        break;    case wxCURSOR_PAINT_BRUSH:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorPaintBrush);        break;    case wxCURSOR_POINT_LEFT:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorPointLeft);        break;    case wxCURSOR_POINT_RIGHT:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorPointRight);        break;    case wxCURSOR_QUESTION_ARROW:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorQuestionArrow);        break;    case wxCURSOR_BLANK:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorBlank);        break;    case wxCURSOR_RIGHT_ARROW:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorRightArrow);        break;    case wxCURSOR_SPRAYCAN:        M_CURSORDATA->m_hCursor = wxGetStockCursor(kwxCursorRoller);        break;    case wxCURSOR_CHAR:    case wxCURSOR_ARROW:    case wxCURSOR_LEFT_BUTTON:    case wxCURSOR_RIGHT_BUTTON:    case wxCURSOR_MIDDLE_BUTTON:    default:        M_CURSORDATA->m_themeCursor = kThemeArrowCursor;        break;    }    if ( M_CURSORDATA->m_themeCursor == -1 )        M_CURSORDATA->m_releaseHandle = true;}void wxCursor::MacInstall() const{    gMacCurrentCursor = *this ;    if ( m_refData && M_CURSORDATA->m_themeCursor != -1 )    {        SetThemeCursor( M_CURSORDATA->m_themeCursor ) ;    }    else if ( m_refData && M_CURSORDATA->m_hCursor )    {#ifndef __LP64__       if ( M_CURSORDATA->m_isColorCursor )            ::SetCCursor( (CCrsrHandle) M_CURSORDATA->m_hCursor ) ;        else            ::SetCursor( * (CursHandle) M_CURSORDATA->m_hCursor ) ;#endif    }    else    {        SetThemeCursor( kThemeArrowCursor ) ;    }}wxCursor::~wxCursor(){}// Global cursor settingvoid wxSetCursor(const wxCursor& cursor){    cursor.MacInstall() ;}

⌨️ 快捷键说明

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