OUTPUTWND.H
上传用户:lvjun8202
上传日期:2013-04-30
资源大小:797k
文件大小:5k
源码类别:

SNMP编程

开发平台:

C/C++

  1. /*
  2. =================================================================
  3. class TOutputWnd
  4. ----------------
  5. This is the colourful text display window.
  6. has optimisations when mono-spaced fonts are used.
  7. =================================================================
  8. */
  9. #pragma once
  10. #ifndef FLAG
  11. #define FLAG( a,b ) ( ( a & b ) == b )
  12. #endif // FLAG
  13. // -----------------------------------------------------------------
  14. // Control:
  15. // -----------------------------------------------------------------
  16. #define CONTROL_BYTE  3 // Control Character
  17. #define WRAP_BYTE 30 // Word-wrap byte
  18. // -----------------------------------------------------------------
  19. // Colour Code Structure.
  20. // -----------------------------------------------------------------
  21. typedef struct _tagCOLOURCODE
  22. {
  23. UINT nFore; // Foreground Colour Index
  24. UINT nBack; // Background Colour Index
  25. } COLOURCODE;
  26. // -----------------------------------------------------------------
  27. // Colour Codes:
  28. // -----------------------------------------------------------------
  29. #define COLOUR_WHITE 0
  30. #define COLOUR_BLACK 1
  31. #define COLOUR_BLUE 2
  32. #define COLOUR_GREEN 3
  33. #define COLOUR_LIGHTRED 4
  34. #define COLOUR_BROWN 5
  35. #define COLOUR_PURPLE 6
  36. #define COLOUR_ORANGE 7
  37. #define COLOUR_YELLOW 8
  38. #define COLOUR_LIGHTGREEN 9
  39. #define COLOUR_CYAN 10
  40. #define COLOUR_LIGHTCYAN 11
  41. #define COLOUR_LIGHTBLUE 12
  42. #define COLOUR_PINK 13
  43. #define COLOUR_GREY 14
  44. #define COLOUR_LIGHTGREY 15
  45. // -----------------------------------------------------------------
  46. // class TOutputWnd
  47. // -----------------------------------------------------------------
  48. class TOutputWnd : public CWnd
  49. {
  50. protected:
  51. CFont* m_pFont; // Font we are using
  52. LOGFONT m_lfFont; // Font as a LOGFONT
  53. COLORREF m_BackCol; // Background Colour
  54. CStringArray m_Lines; // Lines
  55. int m_nHead; // Head of the buffer
  56. int m_nMaxLines; // Maximum buffer size
  57. int m_nDefTextCol; // Default Text Colour Index
  58. int m_nXOffset; // X Offset for drawing
  59. int m_nMaxWidth; // Maximum Written so far
  60. int m_nAvgCharWidth; // Average Char Width
  61. bool m_bWordWrap; // Word wrapping?
  62. HCURSOR m_hCursor; // Cursor for the window
  63. int m_nFontHeight; // Height of the font
  64. COLORREF m_ColTable[ 16 ]; // Colour Table
  65. // Really internal shit:
  66. int m_nLinesDone; // Actual number of lines we drew last-time
  67. // Private function to obtain a LINEINFO structure
  68. int  GetLineInfo( CString&, CDC*, int );
  69. void RenderSingleLine( CString&, CDC*, int, int );
  70. int  GetColourCodes( CString&, COLOURCODE* ); // Remains the same
  71. public:
  72. TOutputWnd();
  73. virtual ~TOutputWnd();
  74. // Operations:
  75. void SetWordWrap( bool bWrap ); // Set Word-wrapping
  76. bool GetWordWrap() const { return( m_bWordWrap ); };
  77. void SetDefaultTextColour( UINT nIndex ) { m_nDefTextCol = nIndex; if( GetSafeHwnd() ) Invalidate(); }; // Set default text colour
  78. UINT GetDefaultTextColour() const { return( m_nDefTextCol ); };
  79. void SetBuffer( CStringArray& ); // Set the buffer
  80. bool GetBuffer( CStringArray& ) const; // Return the buffer
  81. void AddLine( CString& strLine ); // Add a Line
  82. void SetFont( LOGFONT& lf ); // Set the Font
  83. bool GetFont( LOGFONT& lf ) const; // Return the Font
  84. void SetBackColour( COLORREF col ); // Set the background Colour
  85. COLORREF GetBackColour() const { return( m_BackCol ); };// Retrieve the background Colour
  86. void SetColourTable( COLORREF* pColTable ) { memcpy( &m_ColTable, pColTable, sizeof( COLORREF ) * 16 ); if( GetSafeHwnd() ) Invalidate(); };
  87. void SetHead( int nHead ); // Set the Head
  88. int GetHead() const { return( m_nHead ); }; // Return the Head
  89. void SetMaxLines( UINT nMaxLines ); // Set max number of lines
  90. UINT GetMaxLines() const { return( m_nMaxLines ); }; // Return max number of lines
  91. UINT GetMaxViewableLines(); // Return viewable lines
  92. int GetLineCount() const { return( m_Lines.GetUpperBound() + 1 ); }; // Get Line Count
  93. CString GetLine( int l ) const { return( m_Lines.GetAt( l ) ); }; // Retrieve a specific line
  94. void ClearBuffer(); // Clear the buffer
  95. void Load( const char* lpFilename ); // Load from a file
  96. void Save( const char* lpFilename ); // Save to a file
  97. protected:
  98. // Update the Vertical/Horizontal scrollbars...
  99. virtual void UpdateHScroll();
  100. virtual void UpdateVScroll();
  101. // Overrides
  102. // ClassWizard generated virtual function overrides
  103. //{{AFX_VIRTUAL(TOutputWnd)
  104. //}}AFX_VIRTUAL
  105. // Generated message map functions
  106. protected:
  107. //{{AFX_MSG(TOutputWnd)
  108. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  109. afx_msg void OnDestroy();
  110. afx_msg void OnPaint();
  111. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  112. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  113. afx_msg void OnSize(UINT nType, int cx, int cy);
  114. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  115. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  116. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  117. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  118. //}}AFX_MSG
  119. DECLARE_MESSAGE_MAP()
  120. };