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

📄 rc2xml.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    while (ch!=34)        ReadChar(ch);    ReadChar(ch);    while (done==false)    {        if ((ch==34)&&(lastch!='\\'))        {            wxFileOffset p = m_rc.Tell();            ReadChar(ch);            // RC supports "", for embedded quote, as well as  \"            if (ch==34)                phrase+='\\';            else            {                m_rc.Seek(p);                done = true;                }            }         if (done==true)             break;         if (ch=='\r')             ReadChar(ch);                    // skip         if ((ch=='\n')&&(lastch=='\\'))      // lastch <should> be this             phrase+='n';                     // escape         else             phrase+=(char)ch;         lastch=ch;         ReadChar(ch);    }    return phrase;}void rc2xml::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;}void rc2xml::ParseComboBox(wxString varname){/* COMBOBOX        IDC_SCALECOMBO,10,110,48,52,CBS_DROPDOWNLIST | CBS_SORT |                    WS_VSCROLL | WS_TABSTOP */    wxString token,style;    int x,y,width,height;    bool GotOrs;    GotOrs = ReadOrs(token);    if (ReadRect(x,y,width,height))        if (GotOrs==false)      ReadOrs(token);    m_xmlfile.Write(_T("\t\t<object class=\"wxComboBox\""));    WriteBasicInfo(x,y,width,height,varname);    if (token.Find(_T("CBS_SIMPLE")) != wxNOT_FOUND)        WriteStyle(_T("wxCB_SIMPLE"));    if (token.Find(_T("CBS_SORT")) != wxNOT_FOUND)        WriteStyle(_T("wxCB_SORT"));    if (token.Find(_T("CBS_DISABLENOSCROLL")) != wxNOT_FOUND)        WriteStyle(_T("wxLB_ALWAYS_SB"));    m_xmlfile.Write(_T("\n\t\t</object>\n"));}void rc2xml::ParseMenu(wxString varname){    wxString token=wxEmptyString;    //Write menubar to xml file    m_xmlfile.Write(_T("\t<object class=\"wxMenuBar\""));    //Avoid duplicate names this way    varname.Replace(_T("IDR_"),_T("MB_"));    WriteName(varname);    m_xmlfile.Write(_T(">\n"));    while ((token!=_T("BEGIN"))&(token!=_T("{")))        token=GetToken();    while ((token!=_T("END"))&(token!=_T("}")))    {    token=GetToken();    token.MakeUpper();    if (token==_T("POPUP"))        {        ParsePopupMenu();        }    }    m_xmlfile.Write(_T("\t</object>\n"));}void rc2xml::ParsePopupMenu(){    static int menucount=0;    menucount++;    wxString token,name,msg,longhelp,tip;    token=GetQuoteField();//Remove \t because it causes problems//spot=token.First("\\t");//token=token.Left(spot);//Write Menu item//Generate a fake name since RC menus don't have one    name << _T("Menu_") << menucount;    m_xmlfile.Write(_T("\t\t<object class=\"wxMenu\""));    WriteName(name);    m_xmlfile.Write(_T(">\n"));    WriteLabel(token);    while ((token!=_T("BEGIN"))&(token!=_T("{")))        token=GetToken();    while ((token!=_T("END"))&(token!=_T("}")))    {    token=GetToken();    token.MakeUpper();    if (token==_T("POPUP"))        ParsePopupMenu();    if (token==_T("MENUITEM"))        ParseMenuItem();    }    m_xmlfile.Write(_T("\t\t\t</object>\n"));}wxString rc2xml::PeekToken(){    wxFileOffset p = m_rc.Tell();    wxString token=GetToken();    m_rc.Seek(p);    return token;}//MS Windows pain in the butt CONTROLvoid rc2xml::ParseControlMS(){    wxString token = PeekToken();    if (token.Contains(_T("\"")))        ParseNormalMSControl();    else        ParseWeirdMSControl();}/*    CONTROL         "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH |                    TBS_NOTICKS | WS_TABSTOP,52,73,100,15*/void rc2xml::ParseSlider(wxString WXUNUSED(label), wxString varname){    wxString token,style;    ReadOrs(token);    if (token.Find(_T("TBS_VERT"))!=wxNOT_FOUND)        style+=_T("wxSL_VERTICAL");    //MFC RC Default is horizontal    else        style+=_T("wxSL_HORIZONTAL");    int x,y,width,height;    ReadRect(x,y,width,height);    m_xmlfile.Write(_T("\t\t<object class=\"wxSlider\""));    WriteBasicInfo(x,y,width,height,varname);    WriteStyle(style);    m_xmlfile.Write(_T("\n\t\t</object>\n"));}/*CONTROL         "Progress1",CG_IDC_PROGDLG_PROGRESS,"msctls_progress32",                    WS_BORDER,15,52,154,13*/void rc2xml::ParseProgressBar(wxString WXUNUSED(label), wxString varname){    wxString token,style;    ReadOrs(token);    int x,y,width,height;    ReadRect(x,y,width,height);//Always horizontal in MFC    m_xmlfile.Write(_T("\t\t<object class=\"wxGauge\""));    WriteBasicInfo(x,y,width,height,varname);    WriteStyle(style);    m_xmlfile.Write(_T("\t\t</object>\n"));}bool rc2xml::ReadOrs(wxString & orstring){    wxString token;    token=PeekToken();    if (token.IsNumber())        return false;    orstring=GetToken();    while(PeekToken()==_T("|"))    {    //Grab |    orstring+=GetToken();    //Grab next token    orstring+=GetToken();    }    return true;}//Is it a checkbutton or a radiobutton or a pushbutton or a groupboxvoid rc2xml::ParseCtrlButton(wxString label, wxString varname){    wxString token;    wxFileOffset p = m_rc.Tell();    ReadOrs(token);    m_rc.Seek(p);    if (token.Find(_T("BS_AUTOCHECKBOX"))!=wxNOT_FOUND)        ParseCheckBox(label, varname);    else if ((token.Find(_T("BS_AUTORADIOBUTTON"))!=wxNOT_FOUND)||             (token.Find(_T("BS_RADIOBUTTON"))!=wxNOT_FOUND))        ParseRadioButton(label, varname);    else if (token.Find(_T("BS_GROUPBOX"))!=wxNOT_FOUND)        ParseGroupBox(label, varname);    else  // if ((token.Find("BS_PUSHBUTTON")!=wxNOT_FOUND)||//                (token.Find("BS_DEFPUSHBUTTON")!=wxNOT_FOUND))        ParsePushButton(label, varname);           // make default case}void rc2xml::WriteSize(int width, int height){    wxString msg;    msg << _T(" <size>") << width << _T(",") << height << _T("d</size>");    m_xmlfile.Write(msg);}void rc2xml::WritePosition(int x, int y){    wxString msg;    msg << _T(" <pos>") << x << _T(",") << y << _T("d</pos>");    m_xmlfile.Write(msg);}void rc2xml::WriteTitle(wxString title){    wxString msg;    msg=_T("\t\t<title>")+title+_T("</title>\n");    m_xmlfile.Write(msg);}void rc2xml::WriteName(wxString name){//Try to convert any number ids into namesname=LookUpId(name);//Replace common MS ids with wxWidgets ids//I didn't do everyone of them    if (name==_T("IDOK"))        name=_T("wxID_OK");    else if (name==_T("IDCANCEL"))        name=_T("wxID_CANCEL");    else if (name==_T("IDAPPLY"))        name=_T("wxID_APPLY");    else if (name==_T("ID_FILE_OPEN"))        name=_T("wxID_OPEN");    else if (name==_T("ID_FILE_CLOSE"))        name=_T("wxID_CLOSE");    else if (name==_T("ID_FILE_SAVE"))        name=_T("wxID_SAVE");    else if (name==_T("ID_FILE_SAVE_AS"))        name=_T("wxID_SAVEAS");    else if (name==_T("ID_APP_EXIT"))        name=_T("wxID_EXIT");    else if (name==_T("ID_FILE_PRINT"))        name=_T("wxID_PRINT");    else if (name==_T("ID_FILE_PRINT_PREVIEW"))        name=_T("wxID_PREVIEW");    else if (name==_T("ID_FILE_PRINT_SETUP"))        name=_T("wxID_PRINT_SETUP");    else if (name==_T("ID_APP_ABOUT"))        name=_T("wxID_ABOUT");    else if (name==_T("ID_EDIT_UNDO"))        name=_T("wxID_UNDO");    else if (name==_T("ID_EDIT_CUT"))        name=_T("wxID_CUT");    else if (name==_T("ID_EDIT_COPY"))        name=_T("wxID_COPY");    else if (name==_T("ID_EDIT_PASTE"))        name=_T("wxID_PASTE");    else if (name==_T("IDYES"))        name=_T("wxID_YES");    else if (name==_T("IDNO"))        name=_T("wxID_NO");    else if (name==_T("IDHELP"))        name=_T("wxID_HELP");    m_xmlfile.Write(_T(" name= \"")+name+_T("\""));}void rc2xml::WriteLabel(wxString label){    label.Replace(_T("&"),_T("$"));    // changes by MS, handle '<' '>' characters within a label.    label.Replace(_T("<"),_T("&lt;"));    label.Replace(_T(">"),_T("&gt;"));    m_xmlfile.Write(_T("\t\t\t<label>")+label+_T("</label>\n"));}void rc2xml::WriteBasicInfo(int x, int y, int width, int height, wxString name){    WriteName(name);    m_xmlfile.Write(_T(">\n"));    m_xmlfile.Write(_T("\t\t\t"));    WritePosition(x,y);    WriteSize(width,height);    m_xmlfile.Write(_T("\n"));}void rc2xml::WriteStyle(wxString style){    if (style.Length()==0)        return;    m_xmlfile.Write(_T("\t\t\t<style>")+style+_T("</style>\n"));}/*    LISTBOX         IDC_LIST1,16,89,48,40,LBS_SORT | LBS_MULTIPLESEL |                    LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP*/void rc2xml::ParseListBox(wxString varname){    wxString token;    token=PeekToken();    while (!token.IsNumber())        {        token=GetToken();        token=PeekToken();        }    int x,y,width,height;    ReadRect(x,y,width,height);    m_xmlfile.Write(_T("\t\t<object class=\"wxListBox\""));    WriteBasicInfo(x,y,width,height,varname);    m_xmlfile.Write(_T("\n\t\t</object>\n"));}/*    CONTROL         "",IDC_RICHEDIT1,"RICHEDIT",ES_AUTOHSCROLL | WS_BORDER |                    WS_TABSTOP,103,110,40,14*/void rc2xml::ParseRichEdit(wxString WXUNUSED(label), wxString varname){    wxString token;    //while (ReadOrs(token));    ReadOrs(token);    int x,y,width,height;    ReadRect(x,y,width,height);    wxString style;//Make it a rich text control    style+=_T("wxTE_MULTILINE ");    m_xmlfile.Write(_T("\t\t<object class=\"wxTextCtrl\""));    WriteBasicInfo(x,y,width,height,varname);    WriteStyle(style);    m_xmlfile.Write(_T("\t\t</object>\n"));}/*CONTROL         "Spin1",IDC_SPIN1,"msctls_updown32",UDS_ARROWKEYS,209,72,                 19,26*/void rc2xml::ParseSpinCtrl(wxString WXUNUSED(label), wxString varname){    wxString token,style;    ReadOrs(token);    if (token.Find(_T("UDS_HORZ"))!=wxNOT_FOUND)        style=_T("wxSP_HORIZONTAL");    //MFC default    else        style=_T("wxSP_VERTICAL");    int x,y,width,height;    ReadRect(x,y,width,height);    m_xmlfile.Write(_T("\t\t<object class=\"wxSpinButton\""));    WriteBasicInfo(x,y,width,height,varname);    WriteStyle(style);    m_xmlfile.Write(_T("\n\t\t</object>\n"));}void rc2xml::FirstPass(){    wxString token,prevtok;    while (!m_done)        {        token=GetToken();        if (token==_T("BITMAP"))            ParseBitmap(prevtok);        else if (token==_T("STRINGTABLE"))            ParseStringTable(prevtok);        else if (token==_T("ICON"))            ParseIcon(prevtok);        prevtok=token;        }}void rc2xml::ParseBitmap(wxString varname){    wxString token;    wxString *bitmapfile;    token=PeekToken();    //Microsoft notation?    if (token==_T("DISCARDABLE"))        {        token=GetToken();        token=PeekToken();        }    bitmapfile=new wxString;    *bitmapfile=GetQuoteField();    m_bitmaplist->Append(varname,bitmapfile);}void rc2xml::SecondPass(){    wxString token,prevtok;    while (!m_done)        {        token=GetToken();        if ((token==_T("DIALOG"))||(token==_T("DIALOGEX")))            ParseDialog(prevtok);        else if (token==_T("MENU"))            ParseMenu(prevtok);        else if (token==_T("TOOLBAR"))            ParseToolBar(prevtok);        prevtok=token;        }}void rc2xml::ParseToolBar(wxString varname){    wxString token;    token=GetToken();    wxASSERT_MSG(token==_T("DISCARDABLE"),_T("Error in toolbar parsing"));//Look up bitmap for toolbar and load    wxNode *node=m_bitmaplist->Find(LookUpId(varname));    wxString *bitmappath;    bitmappath=(wxString *)node->GetData();    wxBitmap bitmap;    if (!bitmap.LoadFile(*bitmappath,wxBITMAP_TYPE_BMP ))        wxLogError(_T("Unable to load bitmap:")+*bitmappath);//Write toolbar to xml file    m_xmlfile.Write(_T("\t<object class=\"wxToolBar\""));//Avoid duplicate names this way    varname.Replace(_T("IDR_"),_T("TB_"));    WriteName(varname);    m_xmlfile.Write(_T(">\n"));    wxString style;    style+=_T("wxTB_FLAT");    WriteStyle(style);

⌨️ 快捷键说明

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