RichEditCtrlEx.h
上传用户:shkeding
上传日期:2007-01-02
资源大小:21k
文件大小:9k
- #ifndef RICHEDCTRLEX_INCLUDED
- #define RICHEDCTRLEX_INCLUDED
- #include <afx.h>
- #include <afxcmn.h>
- #include <atlbase.h>
- #include <list>
- #include <stack>
- using namespace std;
- #pragma warning( disable : 4786 )
- #ifdef RICHED_IMPL
- #ifdef _AFXEXT
- #define RICHED_DECL __declspec( dllexport )
- #else
- #define RICHED_DECL
- #endif
- #else
- #ifdef _AFXEXT
- #define RICHED_DECL __declspec( dllimport )
- #else
- #define RICHED_DECL
- #endif//_AFXEXT
- #endif //RICHED_IMPL
- class CBoolString
- {
- private:
- bool m_b ;
- CString m_strOn ;
- CString m_strOff ;
- public:
- CBoolString( CString strOn, CString strOff="" )
- {
- m_strOn = strOn ;
- m_strOff = strOff ;
- m_b = false ;
- }
- void operator=(bool b ) { m_b = b ; }
- operator CString( ) const
- { return m_b ? m_strOn : m_strOff; }
- };
- class CTextAttributes
- {
- protected:
- int m_nFontSize ;
- CBoolString
- m_bsBold ,
- m_bsUnderline ,
- m_bsItalic ,
- m_bsStrike ;
- int m_nFontNumber ,
- m_nColorFground ,
- m_nColorBground ;
- public:
- CTextAttributes( )
- : m_bsBold( "\b" ) ,
- m_bsUnderline( "\ul" ),
- m_bsItalic( "\i" ),
- m_bsStrike( "\strike" )
- {
- m_nColorBground = m_nColorFground = m_nFontNumber = m_nFontSize = 0 ;
- m_bsBold = false ;
- }
- operator CString( ) const
- {
-
- CString s ;
- s.Format("\plain%s%s%s%s\f%d\fs%d\cb%d\cf%d ",
- (CString)m_bsBold,
- (CString)m_bsUnderline,
- (CString)m_bsItalic,
- (CString)m_bsStrike,
- m_nFontNumber ,
- m_nFontSize ,
- m_nColorBground,
- m_nColorFground
- );
- return s ;
- }
- friend class CRTFBuilder ;
- };
- class CFontList
- : public list<CString>
- {
- public:
- operator CString( ) const
- {
- CString s ;
- s= "{\fonttbl" ;
- int nCount = 0 ;
- for (iterator i = begin( ) ; i!=end( ) ; i++ )
- {
- CString s2 ;
- s2.Format("{\f%d %s;}", nCount++, (*i) ) ;
- s+=s2 ;
- }
- s+='}' ;
- return s ;
- }
- void add( const CString& s )
- { push_back( s ) ; }
- };
- class CColorList
- : public list<COLORREF>
- {
- public:
- int add( COLORREF c )
- {
- push_back ( c ) ;
- return size( )-1 ;
- }
- int find( COLORREF c )
- {
- int n = 0 ;
- for ( iterator i = begin( ) ; i != end( ) ; i++,n++ )
- {
- COLORREF cComp( *i ) ;
- if ( cComp==c )
- return n ;
- }
- return -1 ;
- }
-
- operator CString( ) const
- {
- CString s("{\colortbl" ) ;
- for ( iterator i = begin( ) ; i != end( ) ; i++ )
- {
- COLORREF c( *i ) ;
- int r( ( c & 0x000000ff ) ) ,
- g( ( c >> 8 ) & 0x000000ff ) ,
- b( ( c >> 16 ) & 0x000000ff ) ;
- CString s2 ;
- s2.Format("\red%d\green%d\blue%d;", r,g,b ) ;
- s += s2 ;
- }
- s+='}' ;
- return s ;
- }
- };
- class CRTFBuilder ;
- class CStringManip ;
- class CIntManip ;
- typedef CRTFBuilder&( *RTFSM_PFUNC ) ( CRTFBuilder& ) ;
- typedef CRTFBuilder&( *RTFSM_STRINGPFUNC ) ( CRTFBuilder&, CString& ) ;
- typedef CRTFBuilder&( *RTFSM_INTPFUNC ) ( CRTFBuilder&, int ) ;
- typedef CRTFBuilder&( *RTFSM_BOOLPFUNC ) ( CRTFBuilder&, bool) ;
- typedef CRTFBuilder&( *RTFSM_CONTROLPFUNC ) ( CRTFBuilder&, CRichEditCtrl&) ;
- class RICHED_DECL CManip
- {
- protected:
- CString m_strVal ;
- int m_nVal ;
- LPVOID m_pFunc ;
- bool m_bVal ;
- public:
- virtual CRTFBuilder& go ( CRTFBuilder& ) = 0 ;
- CManip( )
- {
- m_pFunc = NULL ;
- m_nVal = 0 ;
- m_strVal = "" ;
- }
- CManip( LPVOID p ,
- CString s )
- {
- m_pFunc = p ;
- m_strVal = s ;
- }
- CManip( LPVOID p ,
- int n )
- {
- m_pFunc = p ;
- m_nVal = n ;
- }
- CManip( LPVOID p,
- bool b )
- {
- m_pFunc = p ;
- m_bVal = b ;
- }
- };
- class RICHED_DECL CStringManip
- : public CManip
- {
- public:
- CStringManip( RTFSM_STRINGPFUNC p, CString s="") : CManip ( ( LPVOID )p, s ) {};
- CRTFBuilder& go( CRTFBuilder& b )
- { return ( ( RTFSM_STRINGPFUNC ) m_pFunc) ( b, m_strVal ) ; }
- };
- class RICHED_DECL CControlManip
- : public CManip
- {
- protected:
- CRichEditCtrl& m_control ;
- public:
- CControlManip( RTFSM_CONTROLPFUNC p,
- CRichEditCtrl& c ) : m_control( c ) ,
- CManip ( ( LPVOID )p, (CString)"" ) {};
- CRTFBuilder& go( CRTFBuilder& b )
- { return (( RTFSM_CONTROLPFUNC ) m_pFunc)( b, m_control ) ; }
- };
- class RICHED_DECL CIntManip
- : public CManip
- {
- public:
- CIntManip( RTFSM_INTPFUNC p, int n = 0 ) : CManip ( ( LPVOID )p, n ) {};
- CRTFBuilder& go( CRTFBuilder& b )
- { return ( ( RTFSM_INTPFUNC ) m_pFunc )( b, m_nVal ) ; }
- };
- class RICHED_DECL CBoolManip
- : public CManip
- {
- public:
- CBoolManip( RTFSM_BOOLPFUNC p, bool b ) : CManip ( ( LPVOID )p, b ) {};
- CRTFBuilder& go( CRTFBuilder& b )
- { return ( ( RTFSM_BOOLPFUNC ) m_pFunc )( b, m_bVal ) ; }
- };
- class RICHED_DECL CRTFBuilder
- {
- protected:
- CString m_string ;
- CTextAttributes m_attr ;
- CFontList m_fontList ;
- CColorList m_colorList ;
- stack<CTextAttributes> m_attrStack ;
- public:
- void bold (bool b = true );
- void strike(bool b = true );
- void italic( bool b = true ) ;
- void underline( bool b = true ) ;
- void normal( ) ;
- void size (int n);
- void font ( const CString& i ) ;
- void black();
- void blue();
- void green();
- void red();
- void color( COLORREF );
- void backColor( COLORREF );
- void push( ) ;
- void pull( ) ;
-
- operator+=( CString& s ) ;
- CRTFBuilder();
- virtual ~CRTFBuilder();
- void addFont( const CString& s )
- { m_fontList.add( s ) ; }
- void addColor( COLORREF c )
- { m_colorList.add( c ) ; }
- CRTFBuilder& operator+=( LPCTSTR p );
- operator CString( ) const
- { return m_string ; }
- void write (CRichEditCtrl& ) ;
- int colorCount( ) const
- { return m_colorList.size( ) ; }
- public:
- // STREAM OPERATORS
- CRTFBuilder& operator << ( LPCTSTR ) ;
- CRTFBuilder& operator << ( int ) ;
- CRTFBuilder& operator >> ( CRichEditCtrl& ) ;
- friend RICHED_DECL CRTFBuilder& normal ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& push ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& pull ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& black ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& red ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& green ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& blue ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& bold ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& strike ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& italic ( CRTFBuilder& ) ;
- friend RICHED_DECL CRTFBuilder& underline( CRTFBuilder& ) ;
- };
- RICHED_DECL CControlManip write ( CRichEditCtrl& ) ;
- RICHED_DECL CIntManip normal ( int=0 ) ;
- RICHED_DECL CIntManip push ( int=0 ) ;
- RICHED_DECL CIntManip pull ( int=0 ) ;
- RICHED_DECL CIntManip size ( int ) ;
- RICHED_DECL CIntManip color ( int ) ;
- RICHED_DECL CIntManip backColor ( int ) ;
- RICHED_DECL CIntManip addColor ( int ) ;
- RICHED_DECL CIntManip font ( int ) ;
- RICHED_DECL CStringManip font ( LPCTSTR ) ;
- RICHED_DECL CStringManip addFont ( LPCTSTR ) ;
- RICHED_DECL CBoolManip bold ( bool ) ;
- RICHED_DECL CBoolManip strike ( bool ) ;
- RICHED_DECL CBoolManip italic ( bool ) ;
- RICHED_DECL CBoolManip underline ( bool ) ;
- RICHED_DECL CRTFBuilder& operator << ( CRTFBuilder& ,
- RTFSM_PFUNC ) ;
- RICHED_DECL CRTFBuilder& operator << ( CRTFBuilder& ,
- CManip& m ) ;
- class RICHED_DECL CRichEditCtrlEx
- : public CRichEditCtrl
- {
- // Construction
- public:
- CRichEditCtrlEx( );
- // Attributes
- public:
- // Operations
- public:
- void enable( bool b = true )
- { ModifyStyle( b ? WS_DISABLED : 0 , b ? 0 : WS_DISABLED, 0 ) ; }
- void disable( bool b = false )
- { enable( b ) ; }
- void readOnly( bool b = true )
- { SetReadOnly( b ) ; }
- void writable( bool b = true )
- { readOnly( !b ) ; }
- // Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CRichEditCtrlEx)
- protected:
- virtual void PreSubclassWindow();
- //}}AFX_VIRTUAL
- // Implementation
- public:
- virtual ~CRichEditCtrlEx();
- // Generated message map functions
- protected:
- //{{AFX_MSG(CRichEditCtrlEx)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////////
- //{{AFX_INSERT_LOCATION}}
- // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
- //}}AFX_INSERT_LOCATION}}
- #endif //RICHEDCTRLEX_INCLUDED