• <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  評論-2670  文章-0  trackbacks-0
                GacUI終于把上一篇文章中提到的自動采用正則表達式進行高亮的Demo做出來了。這次實現的是C++ colorizer。而XML colorizer不僅需要正則表達式,還需要一個人工維護的狀態,這個等到下一個Demo再提及。先看圖



                在不需要人工維護狀態,僅通過正則表達式就可以著色的時候,編寫一個colorizer變得十分的簡單。這個Colorizer雖然不是一定非得通過繼承來實現,但是這個Demo還是使用了繼承。首先編寫一個類,繼承自GuiTextBoxRegexColorizer,然后在構造函數里面填寫下面的代碼:

            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();
                }
            };

                然后只需要把它綁定到文本框里面就可以了。在這個Demo里面,我們在下拉框的事件里面添加下面的代碼:

                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);
                    }
                }

                當然這樣是不完整的,因為CppColorizer里面還有一個CppKeywords的常量。這實際上是一個正則表達式,里面用“|”字符把所有C++的關鍵字連了起來。內容抄自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為文本框著色已經變得如此簡單。
            posted on 2012-05-17 09:03 陳梓瀚(vczh) 閱讀(2191) 評論(2)  編輯 收藏 引用 所屬分類: GacUI

            評論:
            # re: GacUI Demo:文本框高亮(二) 2012-05-17 20:08 | 蔡東赟
            nice 以后你這個 專門做編輯器ui 算了

            hoho  回復  更多評論
              
            # re: GacUI Demo:文本框高亮(二) 2012-05-17 23:46 | 邱震鈺(zblc)
            mark~

              回復  更多評論
              
            久久免费国产精品一区二区| 99久久综合国产精品免费| 国产精品美女久久久| 伊人久久大香线焦综合四虎| 日韩一区二区三区视频久久| 亚洲国产精品无码久久SM| 久久中文娱乐网| 亚洲第一永久AV网站久久精品男人的天堂AV | 99久久国产综合精品麻豆| 亚洲一区二区三区日本久久九| 色老头网站久久网| 久久国产高潮流白浆免费观看| 久久一区二区三区免费| 国产精品美女久久久| 中文字幕久久久久人妻| 亚洲国产成人久久精品99| 久久久久久免费一区二区三区| 少妇熟女久久综合网色欲| 久久高清一级毛片| 99国内精品久久久久久久 | 国内精品久久久久久久coent| 久久婷婷激情综合色综合俺也去| 香港aa三级久久三级老师2021国产三级精品三级在 | 亚洲国产精品综合久久网络| 日韩精品久久久久久| 996久久国产精品线观看| 久久久一本精品99久久精品66| 2021久久精品免费观看| 久久综合色区| 午夜精品久久影院蜜桃| 久久精品亚洲精品国产欧美| 一级做a爰片久久毛片人呢| 99久久综合狠狠综合久久止| 久久青青草原精品国产| 亚洲愉拍99热成人精品热久久| 伊人情人综合成人久久网小说 | 久久伊人精品青青草原高清| 狠狠色婷婷综合天天久久丁香 | 无码任你躁久久久久久老妇| 老司机午夜网站国内精品久久久久久久久 | 亚洲精品高清国产一线久久|