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

📄 emulator.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{    wxString msg;    msg.Printf( _T("wxEmulator is an environment for testing embedded X11 apps.\n"));    wxMessageBox(msg, _T("About wxEmulator"), wxOK | wxICON_INFORMATION, this);}void wxEmulatorFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event)){#ifdef __WXX11__    if (wxGetApp().m_xnestWindow)    {        wxGetApp().m_xnestWindow->SetHandle((WXWindow) NULL);    }#endif    this->Destroy();    if (wxGetApp().m_xnestPID > 0)    {        wxKill(wxGetApp().m_xnestPID);        wxGetApp().m_xnestPID = 0;    }}IMPLEMENT_CLASS(wxEmulatorContainer, wxWindow)BEGIN_EVENT_TABLE(wxEmulatorContainer, wxWindow)    EVT_SIZE(wxEmulatorContainer::OnSize)    EVT_PAINT(wxEmulatorContainer::OnPaint)    EVT_ERASE_BACKGROUND(wxEmulatorContainer::OnEraseBackground)END_EVENT_TABLE()wxEmulatorContainer::wxEmulatorContainer(wxWindow* parent, wxWindowID id):    wxWindow(parent, id, wxDefaultPosition, wxDefaultSize){}void wxEmulatorContainer::OnSize(wxSizeEvent& WXUNUSED(event)){    DoResize();}void wxEmulatorContainer::DoResize(){    wxSize sz = GetClientSize();    if (wxGetApp().m_xnestWindow#ifdef __WXX11__        && wxGetApp().m_xnestWindow->GetMainWindow()#endif        )    {        int deviceWidth = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.x;        int deviceHeight = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.y;        int x = wxMax(0, (int) ((sz.x - deviceWidth)/2.0));        int y = wxMax(0, (int) ((sz.y - deviceHeight)/2.0));        x += wxGetApp().m_emulatorInfo.m_emulatorScreenPosition.x;        y += wxGetApp().m_emulatorInfo.m_emulatorScreenPosition.y;        wxGetApp().m_xnestWindow->Move(x, y);    }    Refresh();}void wxEmulatorContainer::OnPaint(wxPaintEvent& WXUNUSED(event)){    wxPaintDC dc(this);    wxSize sz = GetClientSize();    if (wxGetApp().m_emulatorInfo.m_emulatorBackgroundBitmap.Ok())    {        int deviceWidth = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.x;        int deviceHeight = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.y;        int x = wxMax(0, (int) ((sz.x - deviceWidth)/2.0));        int y = wxMax(0, (int) ((sz.y - deviceHeight)/2.0));        dc.DrawBitmap(wxGetApp().m_emulatorInfo.m_emulatorBackgroundBitmap, x, y);    }}void wxEmulatorContainer::OnEraseBackground(wxEraseEvent& event){    wxDC* dc wxDUMMY_INITIALIZE(NULL);    if (event.GetDC())    {        dc = event.GetDC();    }    else    {        dc = new wxClientDC(this);    }    dc->SetBackground(wxBrush(wxGetApp().m_emulatorInfo.m_emulatorBackgroundColour, wxSOLID));    dc->Clear();    if (!event.GetDC())        delete dc;}// Information about the emulator decorationsvoid wxEmulatorInfo::Copy(const wxEmulatorInfo& info){    m_emulatorFilename = info.m_emulatorFilename;    m_emulatorTitle = info.m_emulatorTitle;    m_emulatorDescription = info.m_emulatorDescription;    m_emulatorScreenPosition = info.m_emulatorScreenPosition;    m_emulatorScreenSize = info.m_emulatorScreenSize;    m_emulatorBackgroundBitmap = info.m_emulatorBackgroundBitmap;    m_emulatorBackgroundBitmapName = info.m_emulatorBackgroundBitmapName;    m_emulatorBackgroundColour = info.m_emulatorBackgroundColour;    m_emulatorDeviceSize = info.m_emulatorDeviceSize;}// Initialisationvoid wxEmulatorInfo::Init(){    m_emulatorDeviceSize = wxSize(260, 340);    m_emulatorScreenSize = wxSize(240, 320);}// Loads bitmapsbool wxEmulatorInfo::Load(const wxString& appDir){    // Try to find absolute path    wxString absoluteConfigPath = m_emulatorFilename;    if ( !::wxIsAbsolutePath(absoluteConfigPath) )    {        wxString currDir = wxGetCwd();        absoluteConfigPath = currDir + wxString(wxFILE_SEP_PATH) + m_emulatorFilename;        if ( !wxFile::Exists(absoluteConfigPath) )        {            absoluteConfigPath = appDir + wxString(wxFILE_SEP_PATH)                + m_emulatorFilename;        }    }    if ( !wxFile::Exists(absoluteConfigPath) )    {        wxString str;        str.Printf( wxT("Could not find config file %s"),            absoluteConfigPath.c_str() );        wxMessageBox(str);        return false;    }    wxString rootPath = wxPathOnly(absoluteConfigPath);    {        wxFileConfig config(wxT("wxEmulator"), wxT("wxWidgets"),            absoluteConfigPath, wxEmptyString, wxCONFIG_USE_LOCAL_FILE);        config.Read(wxT("/General/title"), & m_emulatorTitle);        config.Read(wxT("/General/description"), & m_emulatorDescription);        config.Read(wxT("/General/backgroundBitmap"), & m_emulatorBackgroundBitmapName);        wxString colString;        if (config.Read(wxT("/General/backgroundColour"), & colString) ||            config.Read(wxT("/General/backgroundColor"), & colString)           )        {            m_emulatorBackgroundColour = wxHexStringToColour(colString);        }        int x = 0, y = 0, w = 0, h = 0, dw = 0, dh = 0;        config.Read(wxT("/General/screenX"), & x);        config.Read(wxT("/General/screenY"), & y);        config.Read(wxT("/General/screenWidth"), & w);        config.Read(wxT("/General/screenHeight"), & h);        if (config.Read(wxT("/General/deviceWidth"), & dw) && config.Read(wxT("/General/deviceHeight"), & dh))        {            m_emulatorDeviceSize = wxSize(dw, dh);        }        m_emulatorScreenPosition = wxPoint(x, y);        m_emulatorScreenSize = wxSize(w, h);    }    if (!m_emulatorBackgroundBitmapName.empty())    {        wxString absoluteBackgroundBitmapName = rootPath + wxString(wxFILE_SEP_PATH) + m_emulatorBackgroundBitmapName;        if ( !wxFile::Exists(absoluteBackgroundBitmapName) )        {            wxString str;            str.Printf( wxT("Could not find bitmap %s"),                absoluteBackgroundBitmapName.c_str() );            wxMessageBox(str);            return false;        }        wxBitmapType type = wxDetermineImageType(m_emulatorBackgroundBitmapName);        if (type == wxBITMAP_TYPE_INVALID)            return false;        if (!m_emulatorBackgroundBitmap.LoadFile(m_emulatorBackgroundBitmapName, type))        {            wxString str;            str.Printf( wxT("Could not load bitmap file %s"),                m_emulatorBackgroundBitmapName.c_str() );            wxMessageBox(str);            return false;        }        m_emulatorDeviceSize = wxSize(m_emulatorBackgroundBitmap.GetWidth(),            m_emulatorBackgroundBitmap.GetHeight());    }    return true;}// Returns the image type, or -1, determined from the extension.wxBitmapType wxDetermineImageType(const wxString& filename){    wxString path, name, ext;    wxSplitPath(filename, & path, & name, & ext);    ext.MakeLower();    if (ext == _T("jpg") || ext == _T("jpeg"))        return wxBITMAP_TYPE_JPEG;    if (ext == _T("gif"))        return wxBITMAP_TYPE_GIF;    if (ext == _T("bmp"))        return wxBITMAP_TYPE_BMP;    if (ext == _T("png"))        return wxBITMAP_TYPE_PNG;    if (ext == _T("pcx"))        return wxBITMAP_TYPE_PCX;    if (ext == _T("tif") || ext == _T("tiff"))        return wxBITMAP_TYPE_TIF;    return wxBITMAP_TYPE_INVALID;}// Convert a colour to a 6-digit hex stringwxString wxColourToHexString(const wxColour& col){    wxString hex;    hex += wxDecToHex(col.Red());    hex += wxDecToHex(col.Green());    hex += wxDecToHex(col.Blue());    return hex;}// Convert 6-digit hex string to a colourwxColour wxHexStringToColour(const wxString& hex){    unsigned char r = (unsigned char)wxHexToDec(hex.Mid(0, 2));    unsigned char g = (unsigned char)wxHexToDec(hex.Mid(2, 2));    unsigned char b = (unsigned char)wxHexToDec(hex.Mid(4, 2));    return wxColour(r, g, b);}// Find the absolute path where this application has been run from.// argv0 is wxTheApp->argv[0]// cwd is the current working directory (at startup)// appVariableName is the name of a variable containing the directory for this app, e.g.// MYAPPDIR. This is checked first.wxString wxFindAppPath(const wxString& argv0, const wxString& cwd, const wxString& appVariableName){    wxString str;    // Try appVariableName    if (!appVariableName.empty())    {        str = wxGetenv(appVariableName);        if (!str.empty())            return str;    }    if (wxIsAbsolutePath(argv0))        return wxPathOnly(argv0);    else    {        // Is it a relative path?        wxString currentDir(cwd);        if (!wxEndsWithPathSeparator(currentDir))            currentDir += wxFILE_SEP_PATH;        str = currentDir + argv0;        if ( wxFile::Exists(str) )            return wxPathOnly(str);    }    // OK, it's neither an absolute path nor a relative path.    // Search PATH.    wxPathList pathList;    pathList.AddEnvList(wxT("PATH"));    str = pathList.FindAbsoluteValidPath(argv0);    if (!str.empty())        return wxPathOnly(str);    // Failed    return wxEmptyString;}

⌨️ 快捷键说明

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