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

📄 rc2wxr.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
// rc2wxr.cpp: implementation of the rc2wxr class.//////////////////////////////////////////////////////////////////////////Author:  Brian Gavin 9/24/00//License: wxWindows License/*WARNING- I know this code has some bugs to work out butI don't plan to fix them since I feel that wxr files willnot be used much longer.This code was used as a starting point for my rc2xml converter*/// For compilers that support precompilation, includes "wx/wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif// for all others, include the necessary headers (this file is usually all you// need because it includes almost all "standard" wxWidgets headers#ifndef WX_PRECOMP    #include "wx/wx.h"#endif#include "wx/image.h"#include "wx/deprecated/setup.h"#include "wx/deprecated/resource.h"#include "rc2wxr.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////rc2wxr::rc2wxr(){    m_done=false;    m_controlid=6000;}rc2wxr::~rc2wxr(){}void rc2wxr::Convert(wxString wxrfile, wxString rcfile){    m_rc.Open(rcfile);    m_filesize=m_rc.Length();    if( (m_wxr  = wxFopen( wxrfile, _T("wt") )) == NULL )    {        return;    }    wxString tok,prevtok;    while (!m_done)    {        tok=GetToken();        if (tok==_T("DIALOG"))        {            ParseDialog(prevtok);        }        if (tok==_T("MENU"))        {            ParseMenu(prevtok);        }        prevtok=tok;    }    fclose(m_wxr);    m_rc.Close();}/*Example .rcMicrosoft style as of v5.0IDD_ABOUTBOX DIALOG DISCARDABLE  0, 0, 217, 55STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENUCAPTION "About Funimator"FONT 8, "MS Sans Serif"  Borland 4.5 style rcIDD_DIBATTR DIALOG 7, 16, 172, 119STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENUCAPTION "DIB Attributes"FONT 8, "MS Sans Serif"{ DEFPUSHBUTTON "Ok", IDOK, 114, 8, 50, 14 PUSHBUTTON "Cancel", IDCANCEL, 114, 28, 50, 14*/void rc2wxr::ParseDialog(wxString dlgname){wxString tok;static int dlgid=999;dlgid++;/* Make sure that this really is a dialogmicrosoft reuses the keyword DIALOG for other things*/tok=PeekToken();//Microsoft notation?if (tok==_T("DISCARDABLE")){tok=GetToken();tok=PeekToken();}//This isn't a Dialog resource eject ejectif (!tok.IsNumber())    return;//Generate Dialog textwxFprintf(m_wxr,_T("static char *dialog%i = \"dialog(name = '%s',\\\n"),dlgid,dlgname.c_str());//be lazy about style for now. add it laterwxFprintf(m_wxr,_T("style = 'wxRAISED_BORDER | wxCAPTION | wxRESIZE_BORDER | wxSYSTEM_MENU',\\\n"));wxFprintf(m_wxr,_T("id = %i,\\\n"),dlgid);//Record x,y,width,heightint x,y,width,height;ReadRect(x,y,width,height);wxFprintf(m_wxr,_T("x = %i, y = %i, width = %i, height = %i,\\\n"),x,y,width,height);//CAPTION "About Funimator"//Get Titletok=GetToken();wxString title;while ((tok!=_T("BEGIN"))&(tok!=_T("{"))){if (tok==_T("CAPTION")){title=GetQuoteField();wxFprintf(m_wxr,_T("title = '%s',\\\n"),title.c_str());}tok=GetToken();}wxFprintf(m_wxr,_T("use_dialog_units = 1,\\\n"));wxFprintf(m_wxr,_T("use_system_defaults = 0,\\\n"));wxFprintf(m_wxr,_T("font = [8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif'],\\\n"));ParseControls();wxFprintf(m_wxr,_T(").\";\n\n"));}/*BEGIN    EDITTEXT        IDC_BANDS,36,83,22,14,ES_AUTOHSCROLL | ES_NUMBER | NOT                    WS_TABSTOP    LTEXT           "Bands",IDC_STATIC,11,86,21,8    EDITTEXT        IDC_NAME,10,3,75,14,ES_AUTOHSCROLLEND*/void rc2wxr::ParseControls(){wxString tok;tok=GetToken();while ((tok!=_T("END"))&(tok!=_T("}"))){if (tok==_T("LTEXT"))    ParseStaticText();if (tok==_T("EDITTEXT"))    ParseTextCtrl();if (tok==_T("PUSHBUTTON"))    ParsePushButton();if (tok==_T("DEFPUSHBUTTON"))    ParsePushButton();if (tok==_T("GROUPBOX"))    ParseGroupBox();if (tok==_T("COMBOBOX"))    ParseComboBox();if (tok==_T("CONTROL"))    ParseControlMS();tok=GetToken();}}//LTEXT           "Radius",IDC_STATIC,9,67,23,8void rc2wxr::ParseStaticText(){wxString tok;wxString phrase,varname;phrase=GetQuoteField();varname=GetToken();m_controlid++;int x,y,width,height;ReadRect(x,y,width,height);wxFprintf(m_wxr,_T("  control = [%i,wxStaticText,'%s','0','%s',"),m_controlid,phrase.c_str(),varname.c_str());wxFprintf(m_wxr,_T("%i,%i,%i,%i,'',\\\n"),x,y,width,height);wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n"));}//EDITTEXT        IDC_RADIUS,36,65,40,14,ES_AUTOHSCROLLvoid rc2wxr::ParseTextCtrl(){wxString tok;wxString varname;varname=GetToken();m_controlid++;int x,y,width,height;ReadRect(x,y,width,height);wxFprintf(m_wxr,_T("  control = [%i,wxTextCtrl,'','0','%s',"),m_controlid,varname.c_str());wxFprintf(m_wxr,_T("%i,%i,%i,%i,'',\\\n"),x,y,width,height);wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n"));}//PUSHBUTTON      "Create/Update",IDC_CREATE,15,25,53,13,NOT WS_TABSTOPvoid rc2wxr::ParsePushButton(){wxString tok;wxString phrase,varname;phrase=GetQuoteField();varname=GetToken();int c;m_controlid++;c=m_controlid;if (varname==_T("IDOK"))c=wxID_OK;if (varname==_T("IDCANCEL"))c=wxID_CANCEL;if (varname==_T("IDAPPLY"))c=wxID_APPLY;int x,y,width,height;ReadRect(x,y,width,height);wxFprintf(m_wxr,_T("  control = [%i,wxButton,'%s','0','%s',"),c,phrase.c_str(),varname.c_str());wxFprintf(m_wxr,_T("%i,%i,%i,%i,'',\\\n"),x,y,width,height);wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n"));}bool rc2wxr::Separator(int ch){if ((ch==' ')|(ch==',')|(ch==13)|(ch==10)|(ch=='|'))   return true;if (ch==EOF){m_done=true;return true;}return false;}void rc2wxr::ParseGroupBox(){//    GROUPBOX        "Rotate",IDC_STATIC,1,1,71,79wxString tok;wxString phrase,varname;phrase=GetQuoteField();varname=GetToken();m_controlid++;int x,y,width,height;ReadRect(x,y,width,height);wxFprintf(m_wxr,_T("  control = [%i,wxStaticBox,'%s','0','%s',"),m_controlid,phrase.c_str(),varname.c_str());wxFprintf(m_wxr,_T("%i,%i,%i,%i,'',\\\n"),x,y,width,height);wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n"));}void rc2wxr::ReadRect(int & x, int & y, int & width, int & height){x=wxAtoi(GetToken());y=wxAtoi(GetToken());width=wxAtoi(GetToken());height=wxAtoi(GetToken());}wxString rc2wxr::GetToken(){wxString tok=wxEmptyString;if (m_rc.Eof()){m_done=true;return tok;}int ch=0;ReadChar(ch);if (ch==EOF){m_done=true;return tok;}while (Separator(ch)){  ReadChar(ch);  if (m_done)  return tok;}if (ch==EOF){m_done=true;}while (!Separator(ch)){tok+=(char)ch;ReadChar(ch);}if (ch==EOF)   m_done=true;return tok;}wxString rc2wxr::GetQuoteField(){    wxString phrase;    //ASCII code 34 "    int ch=0;    ReadChar(ch);    while (ch!=34)        ReadChar(ch);    ReadChar(ch);    while (ch!=34)    {        phrase+=(char)ch;        ReadChar(ch);    }    return phrase;}void rc2wxr::ReadChar(int &ch){    wxFileOffset result = m_rc.Tell();    if ( result >= m_filesize )        m_done=true;    result = m_rc.Read(&ch,1);    if ( result==wxInvalidOffset )        m_done=true;    if(ch==EOF)        m_done=true;}/* COMBOBOX        IDC_SCALECOMBO,10,110,48,52,CBS_DROPDOWNLIST | CBS_SORT |                    WS_VSCROLL | WS_TABSTOP */void rc2wxr::ParseComboBox(){    int x,y,width,height;    wxString tok;    wxString varname = GetToken();    m_controlid++;    ReadRect(x,y,width,height);    wxFprintf(m_wxr,_T("  control = [%i,wxChoice,'','0','%s',"),m_controlid,varname.c_str());    wxFprintf(m_wxr,_T("%i,%i,%i,%i,[],\\\n"),x,y,width,height);    wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n"));}void rc2wxr::ParseMenu(wxString name){    wxString tok;    static int menuid=0;    menuid++;    wxFprintf(m_wxr,_T("static char *MenuBar%i = \"menu(name = '%s',\\\n"),menuid,name.c_str());    wxFprintf(m_wxr,_T("menu = \\\n"));    wxFprintf(m_wxr,_T("[\\\n"));    while ((tok!=_T("BEGIN"))&(tok!=_T("{")))        tok=GetToken();    while ((tok!=_T("END"))&(tok!=_T("}")))    {        tok=GetToken();        if (tok==_T("POPUP"))        {            ParsePopupMenu();            wxFprintf(m_wxr,_T("  ],\\\n"));        }    }    wxFprintf(m_wxr,_T("]).\";\n\n"));}void rc2wxr::ParsePopupMenu(){    static int menuitem=99;    menuitem++;    wxString tok = GetQuoteField();    int spot;    //Remove /t because it causes problems    spot=tok.First(_T("\\t"));    tok=tok.Left(spot);    wxFprintf(m_wxr,_T("  ['%s',%i,'',\\\n"),tok.c_str(),menuitem);    while ((tok!=_T("BEGIN"))&(tok!=_T("{")))        tok=GetToken();    while ((tok!=_T("END"))&(tok!=_T("}")))    {        tok=GetToken();        if (tok==_T("MENUITEM"))        {            if (PeekToken()==_T("SEPARATOR"))            {                wxFprintf(m_wxr,_T("      [],\\\n"));            }            else            {                tok=GetQuoteField();                //Remove /t because it causes problems                spot=tok.First(_T("\\t"));                tok=tok.Left(spot);                menuitem++;                wxFprintf(m_wxr,_T("      ['%s',%i,''],\\\n"),tok.c_str(),menuitem);            }        }    }}wxString rc2wxr::PeekToken(){    wxFileOffset p = m_rc.Tell();    wxString tok = GetToken();    m_rc.Seek(p);    return tok;}//Windows pain in the butt CONTROLvoid rc2wxr::ParseControlMS(){    wxString tok;    wxString label=GetQuoteField();    wxString varname=GetToken();    wxString kindctrl=GetQuoteField();    kindctrl.MakeUpper();    if (kindctrl==_T("MSCTLS_TRACKBAR32"))        ParseSlider(label,varname);    if (kindctrl==_T("MSCTLS_PROGRESS32"))        ParseProgressBar(label,varname);    if (kindctrl==_T("BUTTON"))        ParseCtrlButton(label,varname);}/*    CONTROL         "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH |                    TBS_NOTICKS | WS_TABSTOP,52,73,100,15*/void rc2wxr::ParseSlider(wxString WXUNUSED(label), wxString varname){    int x,y,width,height;    wxString tok;    while (ReadOrs(tok))        ;    wxFprintf(m_wxr,_T("  control = [%i,wxSlider,'','wxSL_HORIZONTAL','%s',"),m_controlid,varname.c_str());    ReadRect(x,y,width,height);    wxFprintf(m_wxr,_T("%i,%i,%i,%i,"),x,y,width,height);    wxFprintf(m_wxr,_T(" 1, 1, 10,\\\n"));    wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n"));}/*CONTROL         "Progress1",CG_IDC_PROGDLG_PROGRESS,"msctls_progress32",                    WS_BORDER,15,52,154,13*/void rc2wxr::ParseProgressBar(wxString WXUNUSED(label), wxString varname){    int x,y,width,height;    wxString tok;    while (ReadOrs(tok))        ;    wxFprintf(m_wxr,_T("  control = [%i,wxGauge,'','wxGA_HORIZONTAL','%s',"),m_controlid,varname.c_str());    ReadRect(x,y,width,height);    wxFprintf(m_wxr,_T("%i,%i,%i,%i,"),x,y,width,height);    wxFprintf(m_wxr,_T(" 0, 10,\\\n"));    wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n"));}bool rc2wxr::ReadOrs(wxString & w){    wxString tok = PeekToken();    if (tok.IsNumber())        return false;    w=GetToken();    return true;}//Is it a check button or a radio buttonvoid rc2wxr::ParseCtrlButton(wxString label, wxString varname){    int x,y,width,height;    wxString tok = GetToken();    m_controlid++;    if (tok==_T("BS_AUTOCHECKBOX"))    {        wxFprintf(m_wxr,_T("  control = [%i,wxCheckBox,'%s','0','%s',"),m_controlid,label.c_str(),varname.c_str());        while (ReadOrs(tok))            ;        ReadRect(x,y,width,height);        wxFprintf(m_wxr,_T("%i,%i,%i,%i,0,\\\n"),x,y,width,height);        wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n"));    }    if (tok==_T("BS_AUTORADIOBUTTON"))    {        wxFprintf(m_wxr,_T("  control = [%i,wxRadioButton,'%s','0','%s',"),m_controlid,label.c_str(),varname.c_str());        while(ReadOrs(tok))            ;        ReadRect(x,y,width,height);        wxFprintf(m_wxr,_T("%i,%i,%i,%i,0,\\\n"),x,y,width,height);        wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n"));    }}

⌨️ 快捷键说明

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