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

📄 display.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
};pascal void DMModeListIteratorProc(    void* pData,    DMListIndexType nIndex,    DMDisplayModeListEntryPtr pInfo){    DMModeIteratorRec* pInfoData = (DMModeIteratorRec*) pData;    // Note that in testing the refresh rate is always 0 on my ibook - RN    int refresh = (int) Fix2Long(pInfo->displayModeResolutionInfo->csRefreshRate);#define pDBI pInfo->displayModeDepthBlockInfo->depthVPBlock[i].depthVPBlock    for (unsigned long i = 0; i < pInfo->displayModeDepthBlockInfo->depthBlockCount; ++i)    {        if (wxVideoMode( (int) pInfo->displayModeResolutionInfo->csHorizontalPixels,                        (int) pInfo->displayModeResolutionInfo->csVerticalLines,                        (int) pDBI->vpPixelSize,                        refresh).Matches(*pInfoData->pMatchMode) )        {            pInfoData->pModes->Add(                wxVideoMode(                    (int) pInfo->displayModeResolutionInfo->csHorizontalPixels,                    (int) pInfo->displayModeResolutionInfo->csVerticalLines,                    (int) pDBI->vpPixelSize,                    refresh ) );        }    }#undef pDBI}struct DMModeInfoRec{    const wxVideoMode* pMode;    VDSwitchInfoRec sMode;    bool bMatched;};pascal void DMModeInfoProc(    void* pData,    DMListIndexType nIndex,    DMDisplayModeListEntryPtr pInfo ){    DMModeInfoRec* pInfoData = (DMModeInfoRec*) pData;    Fixed refresh = Long2Fix(pInfoData->pMode->refresh);#define pDBI pInfo->displayModeDepthBlockInfo->depthVPBlock[i].depthVPBlock    for (unsigned long i = 0; i < pInfo->displayModeDepthBlockInfo->depthBlockCount; ++i)    {        if (pInfoData->pMode->w == (int&) pInfo->displayModeResolutionInfo->csHorizontalPixels &&            pInfoData->pMode->h == (int&) pInfo->displayModeResolutionInfo->csVerticalLines &&            pInfoData->pMode->bpp == (int) pDBI->vpPixelSize &&            refresh == pInfo->displayModeResolutionInfo->csRefreshRate)        {            memcpy(                &pInfoData->sMode,                pInfo->displayModeDepthBlockInfo->depthVPBlock[i].depthSwitchInfo,                sizeof(VDSwitchInfoRec));            pInfoData->sMode.csMode = pDBI->vpPixelSize;            pInfoData->bMatched = true;            break;        }    }#undef pDBI}struct DMModeTransRec{    wxVideoMode Mode;    const VDSwitchInfoRec* psMode;    bool bMatched;};pascal void DMModeTransProc(    void* pData,    DMListIndexType nIndex,    DMDisplayModeListEntryPtr pInfo){    DMModeTransRec* pInfoData = (DMModeTransRec*) pData;#define pDBI pInfo->displayModeDepthBlockInfo->depthVPBlock[i].depthVPBlock    for (unsigned long i = 0; i < pInfo->displayModeDepthBlockInfo->depthBlockCount; ++i)    {        if (pInfoData->psMode->csData == pInfo->displayModeDepthBlockInfo->depthVPBlock[i].depthSwitchInfo->csData)        {            pInfoData->Mode = wxVideoMode(                (int) pInfo->displayModeResolutionInfo->csHorizontalPixels,                (int) pInfo->displayModeResolutionInfo->csVerticalLines,                (int) pDBI->vpPixelSize,                (int) Fix2Long(pInfo->displayModeResolutionInfo->csRefreshRate) );            pInfoData->bMatched = true;            break;        }    }#undef pDBI}wxArrayVideoModes wxDisplayImplMac::GetModes(const wxVideoMode& mode) const{    wxArrayVideoModes Modes;    unsigned long dwDMVer;    // Check DM version == 2    // (for backward compatibility only - 7.5.3+ use 2.0)    Gestalt( gestaltDisplayMgrVers, (long*) &dwDMVer );    if (dwDMVer >= 0x020000)    {        DMListIndexType nNumModes;        DMListType pModes;        DMDisplayModeListIteratorUPP uppMLI;        DisplayIDType nDisplayID;        OSErr err;        err = DMGetDisplayIDByGDevice(m_hndl, &nDisplayID, false);        verify_noerr( err );        // Create a new list...        err = DMNewDisplayModeList(nDisplayID, NULL, NULL, &nNumModes, &pModes);        wxASSERT_MSG( err == noErr, wxT("Could not create a new display mode list") );        uppMLI = NewDMDisplayModeListIteratorUPP(DMModeListIteratorProc);        wxASSERT( uppMLI );        DMModeIteratorRec sModeInfo;        sModeInfo.pModes = &Modes;        sModeInfo.pMatchMode = &mode;        for (DMListIndexType i = 0; i < nNumModes; ++i)        {            err = DMGetIndexedDisplayModeFromList(pModes, i, NULL, uppMLI, &sModeInfo);            verify_noerr( err );        }        DisposeDMDisplayModeListIteratorUPP(uppMLI);        err = DMDisposeList(pModes);        verify_noerr( err );    }    else // DM 1.0, 1.2, 1.x    {        wxLogSysError(            wxString::Format(                wxT("Display Manager Version %u Not Supported!  Present? %s"),                (unsigned int) dwDMVer / 0x10000,                (dwDMVer & (1 << gestaltDisplayMgrPresent) ? wxT("Yes") : wxT("No")) ) );    }    return Modes;}wxVideoMode wxDisplayImplMac::GetCurrentMode() const{    unsigned long dwDMVer;    wxVideoMode RetMode;    // Check DM version == 2    // (for backward compatibility only - 7.5.3+ use 2.0)    Gestalt( gestaltDisplayMgrVers, (long*) &dwDMVer );    if (dwDMVer >= 0x020000)    {        VDSwitchInfoRec sMode; // Note: csMode member also contains the bit depth        OSErr err;        err = DMGetDisplayMode( m_hndl, &sMode );        if (err == noErr)        {            DMListIndexType nNumModes;            DMListType pModes;            DMDisplayModeListIteratorUPP uppMLI;            DisplayIDType nDisplayID;            err = DMGetDisplayIDByGDevice(m_hndl, &nDisplayID, false);            verify_noerr( err );            // Create a new list...            err = DMNewDisplayModeList(nDisplayID, NULL, NULL, &nNumModes, &pModes);            wxASSERT_MSG( err == noErr, wxT("Could not create a new display mode list") );            uppMLI = NewDMDisplayModeListIteratorUPP(DMModeTransProc);            wxASSERT( uppMLI );            DMModeTransRec sModeInfo;            sModeInfo.bMatched = false;            sModeInfo.psMode = &sMode;            for (DMListIndexType i = 0; i < nNumModes; ++i)            {                err = DMGetIndexedDisplayModeFromList(pModes, i, NULL, uppMLI, &sModeInfo);                verify_noerr( err );                if ( sModeInfo.bMatched )                {                    RetMode = sModeInfo.Mode;                    break;                }            }            DisposeDMDisplayModeListIteratorUPP(uppMLI);            err = DMDisposeList(pModes);            verify_noerr( err );        }        else // Can't get current mode?        {            wxLogSysError(                wxString::Format(                    wxT("Couldn't obtain current display mode!!!\ndwDMVer:%u"),                    (unsigned int) dwDMVer));        }    }    else // DM ver 1    {        wxLogSysError(            wxString::Format(                wxT("Display Manager Version %u Not Supported!  Present? %s"),                (unsigned int) dwDMVer / 0x10000,                (dwDMVer & (1 << gestaltDisplayMgrPresent) ? wxT("Yes") : wxT("No")) ) );    }    return RetMode;}bool wxDisplayImplMac::ChangeMode(const wxVideoMode& mode){    unsigned long dwDMVer;    Gestalt( gestaltDisplayMgrVers, (long*)&dwDMVer );    if (GetCount() == 1 || dwDMVer >= 0x020000)    {        if (mode == wxDefaultVideoMode)        {             return true;#if 0//#ifndef __DARWIN__//            Handle hDisplayState;//            if (DMBeginConfigureDisplays(&hDisplayState) != noErr)//            {//                wxLogSysError(wxT("Could not lock display for display mode changing!"));//                return false;//            }////            wxASSERT( DMUseScreenPrefs(true, hDisplayState) == noErr);//            DMEndConfigureDisplays(hDisplayState);//            return true;//#else             // hmmmmm....//           return true;//#endif#endif        }        //0 & NULL for params 2 & 3 of DMSetVideoMode signal it to use defaults (current mode)        //DM 2.0+ doesn't use params 2 & 3 of DMSetDisplayMode        //so we have to use this icky structure        VDSwitchInfoRec sMode;        memset( &sMode, 0, sizeof(VDSwitchInfoRec) );        DMListIndexType nNumModes;        DMListType pModes;        DMDisplayModeListIteratorUPP uppMLI;        DisplayIDType nDisplayID;        OSErr err;        err = DMGetDisplayIDByGDevice(m_hndl, &nDisplayID, false);        verify_noerr( err );        // Create a new list...        err = DMNewDisplayModeList(nDisplayID, NULL, NULL, &nNumModes, &pModes);        wxASSERT_MSG(err == noErr, wxT("Could not create a new display mode list") );        uppMLI = NewDMDisplayModeListIteratorUPP(DMModeInfoProc);        wxASSERT(uppMLI);        DMModeInfoRec sModeInfo;        sModeInfo.bMatched = false;        sModeInfo.pMode = &mode;        unsigned int i;        for (i = 0; i < nNumModes; ++i)        {            err = DMGetIndexedDisplayModeFromList(pModes, i, NULL, uppMLI, &sModeInfo);            verify_noerr( err );            if (sModeInfo.bMatched)            {                sMode = sModeInfo.sMode;                break;            }        }        if (i == nNumModes)            return false;        DisposeDMDisplayModeListIteratorUPP(uppMLI);        err = DMDisposeList(pModes);        verify_noerr( err );        // For the really paranoid -        //     unsigned long flags;        //      Boolean bok;        //     wxASSERT(noErr == DMCheckDisplayMode(m_hndl, sMode.csData,        //                                          sMode.csMode, &flags, NULL, &bok));        //     wxASSERT(bok);        Handle hDisplayState;        if (DMBeginConfigureDisplays(&hDisplayState) != noErr)        {            wxLogSysError(wxT("Could not lock display for display mode changing!"));            return false;        }        unsigned long dwBPP = (unsigned long) mode.bpp;        err = DMSetDisplayMode(            m_hndl, sMode.csData,            (unsigned long*) &(dwBPP),            NULL, //(unsigned long) &sMode            hDisplayState );        if (err != noErr)        {            DMEndConfigureDisplays(hDisplayState);            wxLogError(wxT("Could not set the display mode"));            return false;        }        DMEndConfigureDisplays(hDisplayState);    }    else  // DM 1.0, 1.2, 1.x    {        wxLogSysError(            wxString::Format(                wxT("Monitor gravitation not supported yet.  dwDMVer:%u"),                (unsigned int) dwDMVer));        return false;    }    return true;}// ============================================================================// wxDisplay::CreateFactory()// ============================================================================/* static */ wxDisplayFactory *wxDisplay::CreateFactory(){    return new wxDisplayFactoryMac;}#endif // !OSX#endif // wxUSE_DISPLAY

⌨️ 快捷键说明

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