• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
                GacUI終于把上一篇文章中提到的自動(dòng)采用正則表達(dá)式進(jìn)行高亮的Demo做出來了。這次實(shí)現(xiàn)的是C++ colorizer。而XML colorizer不僅需要正則表達(dá)式,還需要一個(gè)人工維護(hù)的狀態(tài),這個(gè)等到下一個(gè)Demo再提及。先看圖



                在不需要人工維護(hù)狀態(tài),僅通過正則表達(dá)式就可以著色的時(shí)候,編寫一個(gè)colorizer變得十分的簡(jiǎn)單。這個(gè)Colorizer雖然不是一定非得通過繼承來實(shí)現(xiàn),但是這個(gè)Demo還是使用了繼承。首先編寫一個(gè)類,繼承自GuiTextBoxRegexColorizer,然后在構(gòu)造函數(shù)里面填寫下面的代碼:

            class CppColorizer : public GuiTextBoxRegexColorizer
            {
            public:
                CppColorizer()
                {
                    text::ColorEntry entry
            =win7::Win7GetTextBoxTextColor();
                    SetDefaultColor(entry);

                    entry.normal.text
            =Color(1280255);
                    AddToken(L
            "/d+(./d*)?([eE][+/-]?/d+)?", entry);

                    entry.normal.text
            =Color(1632121);
                    AddToken(L
            "\"([^\"]|\\\\/.)*\"", entry);

                    entry.normal.text
            =Color(01280);
                    AddToken(L
            "////[^\r\n]*", entry);
                    AddToken(L
            "///*(//|[*]*[^*//])*/*+//", entry);

                    entry.normal.text
            =Color(00255);
                    AddToken(L
            "#[a-zA-Z0-9_]*", entry);
                    AddToken(CppKeywords, entry);
                    
                    AddToken(L
            "[a-zA-Z0-9_]+", GetDefaultColor());

                    Setup();
                }
            };

                然后只需要把它綁定到文本框里面就可以了。在這個(gè)Demo里面,我們?cè)谙吕虻氖录锩嫣砑酉旅娴拇a:

                void comboSelector_SelectedIndexChanged(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
                {
                    
            switch(comboSelector->GetSelectedIndex())
                    {
                    
            case 0:(略)
                    
            case 1:(略)
                    
            case 2:
                        textBox
            ->SetColorizer(new CppColorizer);
                        textBox
            ->SetText(
                            L
            "#include <iostream>\r\n"
                            L
            "using namespace std;\r\n"
                            L
            "\r\n"
                            L
            "int main()\r\n"
                            L
            "{\r\n"
                            L
            "\t//This is a comment\r\n"
                            L
            "\t/**This*is/another\r\n"
                            L
            "\tcomment**/\r\n"
                            L
            "\tcout<<\"Hello, world!\"<<endl;\r\n"
                            L
            "\treturn 0;\r\n"
                            L
            "}\r\n"
                            );
                        
            break;
                    
            default:
                        textBox
            ->SetColorizer(0);
                    }
                }

                當(dāng)然這樣是不完整的,因?yàn)镃ppColorizer里面還有一個(gè)CppKeywords的常量。這實(shí)際上是一個(gè)正則表達(dá)式,里面用“|”字符把所有C++的關(guān)鍵字連了起來。內(nèi)容抄自MSDN的C++ Language Reference:

              1 const wchar_t* CppKeywords=
              2 L"__abstract|"
              3 L"__alignof|"
              4 L"__asm|"
              5 L"__assume|"
              6 L"__based|"
              7 L"__box|"
              8 L"__cdecl|"
              9 L"__declspec|"
             10 L"__delegate|"
             11 L"__event|"
             12 L"__except|"
             13 L"__fastcall|"
             14 L"__finally|"
             15 L"__forceinline|"
             16 L"__gc|"
             17 L"__hook|"
             18 L"__identifier|"
             19 L"__if_exists|"
             20 L"__if_not_exists|"
             21 L"__inline|"
             22 L"__int16|"
             23 L"__int32|"
             24 L"__int64|"
             25 L"__int8|"
             26 L"__interface|"
             27 L"__leave|"
             28 L"__m128d|"
             29 L"__m128|"
             30 L"__m128i|"
             31 L"__m64|"
             32 L"__multiple_inheritance|"
             33 L"__nogc|"
             34 L"__noop|"
             35 L"__pin|"
             36 L"__property|"
             37 L"__raise|"
             38 L"__sealed|"
             39 L"__single_inheritance|"
             40 L"__stdcall|"
             41 L"__super|"
             42 L"__try|"
             43 L"__except|"
             44 L"__finally|"
             45 L"__try_cast|"
             46 L"__unaligned|"
             47 L"__unhook|"
             48 L"__uuidof|"
             49 L"__value|"
             50 L"__virtual_inheritance|"
             51 L"__w64|"
             52 L"__wchar_t|"
             53 L"wchar_t|"
             54 L"abstract|"
             55 L"array|"
             56 L"bool|"
             57 L"break|"
             58 L"case|"
             59 L"catch|"
             60 L"char|"
             61 L"class|"
             62 L"const_cast|"
             63 L"const|"
             64 L"continue|"
             65 L"decltype|"
             66 L"default|"
             67 L"delegate|"
             68 L"delete|"
             69 L"do|"
             70 L"double|"
             71 L"dynamic_cast|"
             72 L"else|"
             73 L"enum|"
             74 L"event|"
             75 L"explicit|"
             76 L"extern|"
             77 L"false|"
             78 L"finally|"
             79 L"float|"
             80 L"for|"
             81 L"friend|"
             82 L"gcnew|"
             83 L"generic|"
             84 L"goto|"
             85 L"if|"
             86 L"initonly|"
             87 L"inline|"
             88 L"int|"
             89 L"interface|"
             90 L"interior_ptr|"
             91 L"literal|"
             92 L"long|"
             93 L"mutable|"
             94 L"namespace|"
             95 L"new|"
             96 L"new|"
             97 L"nullptr|"
             98 L"operator|"
             99 L"private|"
            100 L"property|"
            101 L"property|"
            102 L"protected|"
            103 L"public|"
            104 L"register|"
            105 L"reinterpret_cast|"
            106 L"return|"
            107 L"sealed|"
            108 L"short|"
            109 L"signed|"
            110 L"sizeof|"
            111 L"static_assert|"
            112 L"static_cast|"
            113 L"static|"
            114 L"struct|"
            115 L"switch|"
            116 L"template|"
            117 L"this|"
            118 L"__thiscall|"
            119 L"throw|"
            120 L"true|"
            121 L"try|"
            122 L"typedef|"
            123 L"typeid|"
            124 L"typeid|"
            125 L"typename|"
            126 L"union|"
            127 L"unsigned|"
            128 L"using|"
            129 L"virtual|"
            130 L"void|"
            131 L"volatile|"
            132 L"while";

                使用GacUI為文本框著色已經(jīng)變得如此簡(jiǎn)單。
            posted on 2012-05-17 09:03 陳梓瀚(vczh) 閱讀(2191) 評(píng)論(2)  編輯 收藏 引用 所屬分類: GacUI

            評(píng)論:
            # re: GacUI Demo:文本框高亮(二) 2012-05-17 20:08 | 蔡?hào)|赟
            nice 以后你這個(gè) 專門做編輯器ui 算了

            hoho  回復(fù)  更多評(píng)論
              
            # re: GacUI Demo:文本框高亮(二) 2012-05-17 23:46 | 邱震鈺(zblc)
            无码国内精品久久综合88| 国内精品伊人久久久久av一坑| 无码日韩人妻精品久久蜜桃| 久久夜色撩人精品国产| 国产V亚洲V天堂无码久久久| 亚洲AV无码久久精品成人| 思思久久99热只有频精品66| 一级做a爰片久久毛片看看| 亚洲国产日韩欧美久久| 一极黄色视频久久网站| 久久亚洲精品成人无码网站| 久久这里只精品99re66| 污污内射久久一区二区欧美日韩| 一本色道久久88综合日韩精品| 亚洲精品tv久久久久| 三级三级久久三级久久| 亚洲中文字幕久久精品无码喷水| 一本色道久久综合狠狠躁| 日韩精品无码久久久久久| 国产精品一久久香蕉产线看| 久久伊人精品青青草原高清| 久久精品中文字幕有码| 久久精品国产亚洲av麻豆图片 | 伊人久久大香线焦综合四虎| 99久久精品免费观看国产| 欧美日韩精品久久久久| 无码精品久久久天天影视| 成人久久久观看免费毛片| 激情综合色综合久久综合| 漂亮人妻被中出中文字幕久久| 欧美丰满熟妇BBB久久久| 国产福利电影一区二区三区久久老子无码午夜伦不 | 狠狠色综合网站久久久久久久| 久久这里有精品视频| 99久久国产宗和精品1上映 | 久久久中文字幕日本| 色欲av伊人久久大香线蕉影院| 四虎国产精品免费久久久| 人妻无码精品久久亚瑟影视| 婷婷综合久久中文字幕| 国产偷久久久精品专区|