• <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~

              回復  更多評論
              
            丁香久久婷婷国产午夜视频| 91精品国产91久久| 亚洲精品99久久久久中文字幕| 久久香蕉国产线看观看精品yw | 久久国产欧美日韩精品| 久久综合九色综合网站| 天天影视色香欲综合久久| 久久综合成人网| 中文字幕精品久久久久人妻| 人妻系列无码专区久久五月天| 色8激情欧美成人久久综合电| 久久久久国色AV免费观看| 亚洲精品无码久久久久AV麻豆| 久久AⅤ人妻少妇嫩草影院| 久久久久久噜噜精品免费直播| 免费一级欧美大片久久网| 日本久久中文字幕| 亚洲日韩中文无码久久| 久久精品亚洲精品国产色婷| 国产产无码乱码精品久久鸭| 777久久精品一区二区三区无码| 国产99久久久久久免费看| 亚洲欧洲久久久精品| 亚洲国产欧洲综合997久久| 久久Av无码精品人妻系列 | 久久久久无码中| 亚洲天堂久久久| 国内精品久久久久久久97牛牛 | 日韩AV毛片精品久久久| 久久久久高潮综合影院| 久久精品九九亚洲精品天堂 | 亚洲精品成人网久久久久久| 中文字幕无码免费久久| 久久精品一区二区三区不卡| 人人狠狠综合88综合久久| 麻豆一区二区99久久久久| 久久se精品一区二区影院 | 91精品国产91热久久久久福利| 亚州日韩精品专区久久久| 99精品久久久久中文字幕| 久久中文字幕视频、最近更新|