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

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            一個有意思的給代碼染色的類:CSyntaxColorizer

            可以給C++代碼染色,演示程序運行后如圖所示:



            其主頁在:http://mypage.uniserve.com/~jeffsch/computing/visualC++/CSyntaxColorizer.html

            Description

            The CSyntaxColorizer class described here is a fast and versatile class for the syntax highlighting of code. The class is very simple to use, very fast, and highly flexible. The default highlighting mode is VC++, with comments in green, strings in dark blue, and keywords in light blue. The class exposes several methods that can be used for changing these defaults - and color is not the only option. Highlighted words can be made bold, italic, underlined, and more. The exposed methods take a CHARFORMAT structure as a parameter, so whatever text formatting changes can be made with a CHARFORMAT structure can also be made with the keyword, comment, and string formats in CSyntaxColorizer. As well, you are not limited to a predefined and fixed set of keyword groupings. The keywords can be grouped in any way you like, and then manipulated by group. For example, you could assign all compiler directives the group ID of 723 (or whatever) and then set all keywords with group ID 723 to the color red.

            The default groupings for the CSyntaxColorizer class are as follows:

            Group 0: VC++ keywords such as for, if, while, void, etc
            Group 1: VC++ compiler directives such as #define, #include, etc
            Group 2: VC++ compiler pragmas such as once, auto_inline, etc

            CSyntaxColorizer maintains member variables, (m_cfDefault, m_cfComment and m_cfString), of type CHARFORMAT. These defaults are used when the class initializes its internal lists, and whenever the keyword, comment or string colors are changed using the methods that take a COLORREF parameter instead of a CHARFORMAT parameter. These default structures have a font of Courier New, 10pt size. Naturally, the class exposes methods for changing the defaults (see below).

            Here are the declarations in CSyntaxColorizer.h for the exposed methods:

                void Colorize(long StartChar, long nEndChar, CRichEditCtrl *pCtrl);
            void Colorize(CHARRANGE cr, CRichEditCtrl *pCtrl);
            void GetCommentStyle(CHARFORMAT &cf) { cf = m_cfComment; };
            void GetStringStyle(CHARFORMAT &cf) { cf = m_cfString; };
            void GetGroupStyle(int grp, CHARFORMAT &cf);
            void GetDefaultStyle(CHARFORMAT &cf) { cf = m_cfDefault; };
            void SetCommentStyle(CHARFORMAT cf) { m_cfComment = cf; };
            void SetCommentColor(COLORREF cr);
            void SetStringStyle(CHARFORMAT cf) { m_cfString = cf; };
            void SetStringColor(COLORREF cr);
            void SetGroupStyle(int grp, CHARFORMAT cf);
            void SetGroupColor(int grp, COLORREF cr);
            void SetDefaultStyle(CHARFORMAT cf) { m_cfDefault = cf; };
            void AddKeyword(LPCTSTR Keyword, CHARFORMAT cf, int grp = 0);
            void AddKeyword(LPCTSTR Keyword, COLORREF cr, int grp = 0);
            void ClearKeywordList();
            CString GetKeywordList();
            CString GetKeywordList(int grp);
            

            [Back to Top]

            Using CSyntaxColorizer

            The simplest and quickest way to use this class is to first declare it, then call one of the overloaded Colorize member functions. For example, this code

                CSyntaxColorizer sc;
            sc.Colorize(0, -1, &m_cRichEditCtrl);
            
            first creates the object, then calls its Colorize method, which in this case colorizes all of the text in the specified rich edit box, using CSyntaxColorizer's default font, keyword groupings, and colors described above.

            If you don't like the default colors, you can change them:

                sc.SetCommentColor(RGB(255,0,0));
            sc.SetStringColor(RGB(0,255,0));
            sc.SetGroupColor(nMyGroup,RGB(0,0,255));
            
            The preceding methods change the color using the CHARFORMAT structures that would be returned by their respective "Get..." methods.

            If it's more than just colors you don't like, then you can set the CHARFORMAT structures using

                sc.SetCommentStyle(cfMyStyle);
            sc.SetStringStyle(cfMyStyle);
            sc.SetGroupStyle(nMyGroup,cfMyStyle);
            
            where cfMyStyle is a CHARFORMAT structure that you have created yourself from scratch, or have retrieved using one of the "Get..." methods and then modified to suit.

            Adding keywords is easy too. The two AddKeyword methods each take an LPCTSTR as a parameter. The parameter is a NULL terminated list of words separated by commas. For example,

               sc.AddKeyword("for,if,while", RGB(255,0,0), 4);
            
            will add the three keywords to the sc object's list, give them the color red and place them in group 4, using the CHARFORMAT structure currently in m_cfDefault. You can also send a single word as the LPCTSTR parameter. If the keyword already exists in the list, its color and group attributes are overwritten by those passed in the AddKeyword method. The AddKeyword method that takes a CHARFORMAT as a parameter instead of a COLORREF works in a similar fashion.

            A word about comments...

            By default, CSyntaxColorizer deals with C++ and Java multiline comments starting with /* and single line comments starting with //. If you want single line comments as in VB, (starting with ' or REM), simply add "REM" as one of the keywords. For example:

                sc.AddKeyword("REM",cfMyStyle,nMyGroup);
            
            CSyntaxColorizer will ignore any style or color settings you specify for the REM keyword, and instead will set them to whatever attributes you have set for the comments. CSyntaxColorizer will automatically treat the ' as the start of a single line comment once "REM" is added to the keyword list. Note: if you add only "REM", then "rem", "Rem", etc will not be recognized - you will have to add these as well.

            Where a comment starts with // and ends with '\' + '\n' (the line continuation character immediately followed by a newline character) CSyntaxColorizer will recognize it, and treat the next line as a comment line.

            [Back to Top]

            Speed

            CSyntaxColorizer is pretty fast. Small files under 20K or so are colorized practically instantaneously on my 466MHz machine. Larger files, over 100K, take four or five seconds. CSyntaxColorizer can locate and identify words to be colorized fairly quickly, but the big time hog is not in the algorithm itself - it's in the text formatting functions of CRichEditCtrl. If you comment out the two lines (line #494 & 495)

                pCtrl->SetSel(iStart,iOffset + x);
            pCtrl->SetSelectionCharFormat(pskTemp->cf);
            
            then a 100K file takes less than a second, but only comments and strings are colorized.

            About the Demo

            The demo project is a quick and dirty dialog box with a rich edit control. It has a rather crude editing capablity, the minimum required to show off some of CSyntaxColorizer's abilities. In particular, if you type in \* to start off a multiline comment, only the one line with the cursor on it will be reformatted. In this case, press the "Format" button. As well, you can load files, but you can't save them.

            For those of you who don't have Visual C++ or just don't feel like compiling the thing, an executable is also available for download.

            Downloads

            ColorizerDemo.zip - 32 Kb VC++ project (includes all source code)
            ColorizerDemo.exe - 32 Kb Windows executable file only

            posted on 2008-04-30 21:48 楊粼波 閱讀(518) 評論(1)  編輯 收藏 引用

            評論

            # re: 一個有意思的給代碼染色的類:CSyntaxColorizer 2010-08-05 14:13 cosplay

            I love your blog so much, and there are just some differences with others'. Hope there will be more wonderful things in your blog. .Happy every day!GFH  回復(fù)  更多評論   


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产精品久久久久aaaa| 久久夜色精品国产噜噜麻豆| 久久久久久综合一区中文字幕| 一本色综合网久久| 国产成人久久精品一区二区三区 | 久久免费精品视频| 国产亚洲色婷婷久久99精品91| 久久久久99精品成人片| 伊人久久大香线蕉综合Av| 国产精品美女久久久| 午夜精品久久久久成人| 亚洲中文久久精品无码ww16| 久久国产亚洲高清观看| 久久国产精品免费| 韩国免费A级毛片久久| 久久久久国产一级毛片高清版| 色天使久久综合网天天| 美女写真久久影院| 久久久久久国产精品免费无码| 国产高潮国产高潮久久久91 | 伊人色综合久久天天人手人婷 | 精品久久一区二区三区| 国产毛片久久久久久国产毛片| 久久久久久精品免费看SSS| 久久精品国产精品亚洲毛片| 久久影视综合亚洲| 亚洲狠狠综合久久| 久久久久人妻一区精品色 | 久久久久国产一级毛片高清板| 色综合久久无码中文字幕| 热综合一本伊人久久精品| 久久国产热精品波多野结衣AV| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 欧美精品国产综合久久| 久久精品免费一区二区三区| 久久久久久无码Av成人影院| 国产精品久久久久久五月尺| 久久久久18| 久久精品免费全国观看国产| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久激情亚洲精品无码?V|