CDragEdit.h
上传用户:jackiejxj
上传日期:2007-01-02
资源大小:35k
文件大小:4k
源码类别:

TreeView控件

开发平台:

Visual C++

  1. //////////////////////////////////////
  2. //
  3. // Author : Sam Lu
  4. // E-mail : ysl@springsoft.com.tw
  5. //
  6. #if !defined(AFX_CDRAGEDIT_H__871E3CD6_6359_11D1_8251_444553540000__INCLUDED_)
  7. #define AFX_CDRAGEDIT_H__871E3CD6_6359_11D1_8251_444553540000__INCLUDED_
  8. #if _MSC_VER >= 1000
  9. #pragma once
  10. #endif // _MSC_VER >= 1000
  11. // CDragEdit.h : header file
  12. //
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CDragEdit window
  15. #include <afxole.h>
  16. class CDragEdit;
  17. class CDEDropTarget : public COleDropTarget
  18. {
  19. public:
  20.     CDEDropTarget()
  21.         {
  22.         ms_bBeginDrop=FALSE;
  23.         ms_pEditCtl=NULL;
  24.         }
  25.     BOOL        Register(CDragEdit* pEdit);
  26.     BOOL        OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
  27.     DROPEFFECT  OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
  28.     void        OnDragLeave(CWnd* pWnd);
  29.     DROPEFFECT  OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
  30.     DROPEFFECT  OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point);
  31. private:
  32.     BOOL        ms_bBeginDrop;
  33.     CDragEdit*  ms_pEditCtl;
  34. };
  35. class CDEDataSource : public COleDataSource
  36. {
  37. };
  38. #define CDragEditBase   CEdit
  39. class CDragEdit : public CDragEditBase
  40. {
  41. // Construction
  42. public:
  43. CDragEdit();
  44. // Attributes
  45. public:
  46.     enum {  DE_ENABLE_DRAG=1, 
  47.             DE_ENABLE_DROP=2
  48.     };
  49. private:
  50.     static  BOOL    ms_bOleInit;
  51.     BOOL            ms_bDragInit;
  52.     int             ms_nEnableFlags;
  53.     BOOL            ms_bInDragging;
  54.     BOOL            ms_bDropEqualDrag;
  55.     int             ms_nDropPtLine;
  56.     int             ms_nDropPtPos;
  57. CDEDropTarget ms_dropTarget;
  58. CDEDataSource ms_dropSource;
  59. // Operations
  60. public:
  61.     BOOL    Init(int nFlags=(DE_ENABLE_DRAG|DE_ENABLE_DROP));
  62.     BOOL    IsInDragging()                  {return ms_bInDragging;}
  63.     void    SetDropEqualDrag(BOOL bEqual)   {ms_bDropEqualDrag=bEqual;}
  64.     void    SetDropPos(int nLine, int nPos) {ms_nDropPtLine=nLine, 
  65.                                              ms_nDropPtPos=nPos;}
  66.     BOOL    GetCurRange(int& nLine1, int& nPos1, int& nLine2, int& nPos2);
  67.     BOOL    GetLinePosByCursor(int& nLine, int& nPos);
  68.     BOOL    SetCaretByCursor();
  69.     BOOL    SetCaret(int nLine, int nPos);
  70.     BOOL    DrawCaretByCursor();
  71.     CPoint  GetPosFromLinePos(int nLine, int nPos)  
  72.                 {return PosFromChar(_LinePosToChar(nLine,nPos));}
  73.     //we reimpelmented this function for fixing SDK's bug
  74.     CPoint  PosFromChar(UINT uChar);
  75.     BOOL    IsInSelRange();
  76.     BOOL    EnableDrag()    
  77.                 {return (ms_nEnableFlags & DE_ENABLE_DRAG) ? TRUE : FALSE;}
  78.     BOOL    EnableDrop()    
  79.                 {return (ms_nEnableFlags & DE_ENABLE_DROP) ? TRUE : FALSE;}
  80.     
  81. private:
  82.     BOOL    _GetSelText(CString& str);
  83.     void    _CharToLinePos(int nChar, int* pnLine, int* pnPos)
  84.                 {
  85.                 if (nChar<0) nChar=0;
  86.                 *pnLine=LineFromChar(nChar);
  87.                 *pnPos=nChar-LineIndex(*pnLine);
  88.                 }
  89.     int     _LinePosToChar(int nLine, int nPos) {return LineIndex(nLine)+nPos;}
  90. // Overrides
  91. // ClassWizard generated virtual function overrides
  92. //{{AFX_VIRTUAL(CDragEdit)
  93. //}}AFX_VIRTUAL
  94. // Implementation
  95. public:
  96. virtual ~CDragEdit();
  97. // Generated message map functions
  98. protected:
  99. //{{AFX_MSG(CDragEdit)
  100. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  101. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  102. //}}AFX_MSG
  103. DECLARE_MESSAGE_MAP()
  104. };
  105. /////////////////////////////////////////////////////////////////////////////
  106. //{{AFX_INSERT_LOCATION}}
  107. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  108. #endif // !defined(AFX_CDRAGEDIT_H__871E3CD6_6359_11D1_8251_444553540000__INCLUDED_)