• <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)
            久久精品亚洲福利| 老司机国内精品久久久久| 人妻无码久久精品| 久久天天躁狠狠躁夜夜avapp | 亚洲精品NV久久久久久久久久| 久久综合给合综合久久| 欧美成人免费观看久久| 亚洲色欲久久久综合网东京热| 久久精品99久久香蕉国产色戒| 国产成人香蕉久久久久| 久久国产精品99精品国产| 99久久婷婷国产综合精品草原| 久久久无码精品亚洲日韩蜜臀浪潮| 久久亚洲中文字幕精品有坂深雪| 狠狠色伊人久久精品综合网| 国产aⅴ激情无码久久| 久久精品国产亚洲Aⅴ香蕉| 青青草原精品99久久精品66| 久久亚洲精品国产精品婷婷 | 精品久久久久久久久午夜福利| 国产精品亚洲美女久久久| 久久精品国产久精国产思思| 亚洲精品久久久www| 大美女久久久久久j久久| 久久人人妻人人爽人人爽| 久久综合亚洲鲁鲁五月天| 91性高湖久久久久| 亚洲国产精品久久久久婷婷软件 | 色综合久久天天综合| 久久国产欧美日韩精品| 亚洲伊人久久精品影院| 久久久久久国产精品美女| 伊人久久大香线蕉AV一区二区| 亚洲国产精品久久66| 国产精品一区二区久久精品| 欧美亚洲色综久久精品国产| 久久精品国产清自在天天线| 久久久噜噜噜久久中文字幕色伊伊| 久久亚洲中文字幕精品一区四| 精品人妻伦九区久久AAA片69| 99精品伊人久久久大香线蕉|