CommandLine.h
上传用户:sdzdgs
上传日期:2020-11-14
资源大小:1589k
文件大小:6k
源码类别:

编辑框

开发平台:

Visual C++

  1. //  CommandLine.h : header file
  2. /////////////////////////////////////////////////////////////////////////////
  3. /////////////////////////////////////////////////////////////////////////////
  4. //  CommandLine - a simple command line interface control with 
  5. //  a custom scrollbar
  6. //
  7. //  Author: Paul Grenz
  8. //  Email:  pgrenz@irlabs.com
  9. //
  10. //  You may freely use or modify this code provided this
  11. //  message is included in all derived versions.
  12. //
  13. //  History - 2004/10/28 Initial release to codeguru.com
  14. //
  15. //
  16. //  This class implements a command line interface with a custom 
  17. //  KDE/Unix-like scrollbar
  18. /////////////////////////////////////////////////////////////////////////////
  19. #if !defined(AFX_COMMANDLINE_H__0D53DA45_B989_482B_8615_81F1D7115A60__INCLUDED_)
  20. #define AFX_COMMANDLINE_H__0D53DA45_B989_482B_8615_81F1D7115A60__INCLUDED_
  21. #if _MSC_VER > 1000
  22. #pragma once
  23. #endif // _MSC_VER > 1000
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CommandLine window
  26. /////////////////////////////////////////////////////////////////////////////
  27. //  notification message.
  28. #define NM_COMMAND_SENT WM_USER+41
  29. //  name of the class.
  30. #define COMMAND_LINE_CLASSNAME (_T("CommandLine"))
  31. #include <vector>
  32. class CCommandLine : public CWnd
  33. {
  34.   //  constants.
  35.   static enum
  36.   {
  37.     ID_EVENT_INCR =           (WM_USER+1),
  38.     ID_EVENT_DECR =           (WM_USER+2),
  39.     MAX_SCROLLBACK_SIZE =     100,
  40.     MAX_DISPLAY_SIZE =        1000,
  41.   };
  42.   // Construction/Destruction
  43.   public:
  44.   CCommandLine();
  45.   virtual ~CCommandLine();
  46.   //  attributes.
  47.   public:
  48.     std::vector<CString>      m_vecLines;
  49.     std::vector<CString>      m_vecInput;
  50.     CFont                     m_fonText;
  51.     CPen                      m_penArrows;
  52.     CPen                      m_penShadow;
  53.     CBrush                    m_brFace;
  54.     CString                   m_szInputLine;
  55.     CString                   m_szLastCommand;
  56.     CString                   m_szPrompt;
  57.     CString                   m_szClsCmd;
  58.     int                       m_nCaretPosX;
  59.     CPoint                    m_ptCaret;
  60.     bool                      m_oCaretPositioned;
  61.     bool                      m_oMouseDownThumb;
  62.     int                       m_nInputPos;
  63.     int                       m_nLineIndex;
  64.     int                       m_nTabSpaces;
  65.     int                       m_nVisibleLines;
  66.     CWnd                      *m_pwndReceiver;
  67.     bool                      m_oScrollUpTopPressed;
  68.     bool                      m_oScrollUpPressed;
  69.     bool                      m_oScrollDnPressed;
  70.     CRect                     m_rcScrollBar;
  71.     CRect                     m_rcScrollTrack;
  72.     CRect                     m_rcScrollUpTop;
  73.     CRect                     m_rcScrollUp;
  74.     CRect                     m_rcScrollDn;
  75.     CRect                     m_rcThumb;
  76.     int                       m_nMinThumbY;
  77.     int                       m_nThumbStartPos;
  78.     bool                      m_oIsLocked;
  79.   // Methods
  80.   public:
  81.    BOOL                      Create(const RECT& rect, UINT uiFlags, CWnd* pwndParent, UINT uiID);
  82.     int                       AddRecv(CString szText);
  83.     int                       AddRecv(char *pcText, ULONG unLength);
  84.     int                       AddSent(CString szText);
  85.     int                       AddSent(char *pcText, ULONG unLength);
  86.     int                       UpdateLine(int nIndex, CString szText);
  87.     bool                      ClearScreen();
  88.     bool                      RegisterWindowClass();
  89.   //  attributes get/set
  90.   public:
  91.     CString                   GetLastCommand() { return m_szLastCommand; };
  92.     void                      SetPrompt(CString szPrompt) { m_szPrompt = szPrompt; Invalidate(); };
  93.     CString                   GetPrompt() { return m_szPrompt; };
  94.     void                      SetClsCommand(CString szClsCmd) { m_szClsCmd = szClsCmd; };
  95.     CString                   GetClsCommand() { return m_szClsCmd; };
  96.     void                      SetTabSpaces(long nTabSpaces) { m_nTabSpaces = (nTabSpaces>0) ? (nTabSpaces) : (1); };
  97.     int                       GetTabSpaces() { return m_nTabSpaces; };
  98.     void                      SetReceiver(CWnd *pwndReceiver) { m_pwndReceiver = pwndReceiver; };
  99.     CWnd*                     GetReceiver() { return m_pwndReceiver; };
  100.     bool                      GetLocked() { return m_oIsLocked; };
  101.     void                      SetLocked(bool oLock) { m_oIsLocked = oLock; };
  102.     void                      SendChar(UINT nChar, UINT nRepCnt, UINT nFlags);    
  103.   //  notifications
  104.   private:
  105.     void                      EmitCommandSent();
  106.     //  functions.
  107.   private:
  108.     int                       ScreenPosFromLineIndex(int nLineIndex);
  109.     int                       LineIndexFromScreenPos(int nScreenPos);
  110.   // Overrides
  111.   public:
  112.   // ClassWizard generated virtual function overrides
  113.   //{{AFX_VIRTUAL(CCommandLine)
  114.   //}}AFX_VIRTUAL
  115. // Generated message map functions
  116.   protected:
  117.   //{{AFX_MSG(CCommandLine)
  118.   afx_msg void OnPaint();
  119.   afx_msg void OnSysColorChange();
  120.   afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  121.   afx_msg void OnKillFocus(CWnd* pNewWnd);
  122.   afx_msg void OnSetFocus(CWnd* pOldWnd);
  123.   afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  124.   afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  125.   afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);    
  126.   afx_msg void OnKeyDown(UINT uiChar, UINT uiRepCnt, UINT uiFlags);
  127.   afx_msg void OnTimer(UINT nIDEvent);
  128.   afx_msg void OnSize(UINT nType, int cx, int cy);
  129.   afx_msg UINT OnGetDlgCode();
  130.   afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  131.   afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
  132.   //}}AFX_MSG
  133.   DECLARE_MESSAGE_MAP()
  134. };
  135. /////////////////////////////////////////////////////////////////////////////
  136. //{{AFX_INSERT_LOCATION}}
  137. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  138. #endif // !defined(AFX_COMMANDLINE_H__0D53DA45_B989_482B_8615_81F1D7115A60__INCLUDED_)