SkinRichEdit.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #ifndef SKIN_RICH_EDIT_HEAD_FILE
  2. #define SKIN_RICH_EDIT_HEAD_FILE
  3. #pragma once
  4. #include <RichOle.h>
  5. #include "SkinUI.h"
  6. #include "ISkinControl.h"
  7. //////////////////////////////////////////////////////////////////////////////////
  8. //图像对象
  9. class SKINUI_CLASS CDataObject : public IDataObject
  10. {
  11. //内核变量
  12. protected:
  13. ULONG m_ulRefCnt; //引用计数
  14. STGMEDIUM m_StgMedium; //对象信息
  15. FORMATETC m_FormatEtc; //对象信息
  16. //接口变量
  17. protected:
  18. IStorage * m_pIStorage; //对象接口
  19. IOleObject * m_pIOleObject; //对象接口
  20. //函数定义
  21. public:
  22. //构造函数
  23. CDataObject();
  24. //析构函数
  25. virtual ~CDataObject();
  26. //基础接口
  27. public:
  28. //增加引用
  29. virtual ULONG STDMETHODCALLTYPE AddRef();
  30. //释放对象
  31. virtual ULONG STDMETHODCALLTYPE Release();
  32. //查询接口
  33. virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, VOID * * ppvObject);
  34. //对象接口
  35. public:
  36. //获取数据
  37. virtual HRESULT STDMETHODCALLTYPE GetData(FORMATETC * pFormatetcIn, STGMEDIUM * pStgMedium);
  38. //设置数据
  39. virtual HRESULT STDMETHODCALLTYPE SetData(FORMATETC * pFormatEtc, STGMEDIUM * pStgMedium, BOOL fRelease);
  40. //其他接口
  41. public:
  42. virtual HRESULT STDMETHODCALLTYPE DUnadvise(DWORD dwConnection) { return E_NOTIMPL; }
  43. virtual HRESULT STDMETHODCALLTYPE QueryGetData(FORMATETC * pFormatEtc) { return E_NOTIMPL; }
  44. virtual HRESULT STDMETHODCALLTYPE EnumDAdvise(IEnumSTATDATA * * ppenumAdvise) { return E_NOTIMPL; }
  45. virtual HRESULT STDMETHODCALLTYPE GetDataHere(FORMATETC * pFormatEtc, STGMEDIUM * pStgMedium ) { return E_NOTIMPL; }
  46. virtual HRESULT STDMETHODCALLTYPE EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC * * ppenumFormatEtc ) { return E_NOTIMPL; }
  47. virtual HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc(FORMATETC * pFormatEtcIn, FORMATETC * pFormatEtcOut) { return E_NOTIMPL; }
  48. virtual HRESULT STDMETHODCALLTYPE DAdvise(FORMATETC * pFormatEtc, DWORD advf, IAdviseSink * pAdvSink, DWORD * pdwConnection) { return E_NOTIMPL; }
  49. //配置函数
  50. public:
  51. //设置图片
  52. bool SetImage(HBITMAP hBitmap);
  53. //加载图片
  54. bool LoadImage(LPCTSTR pszFileName);
  55. //加载图片
  56. bool LoadImage(HINSTANCE hInstance, LPCTSTR lpResourceName);
  57. //图片函数
  58. public:
  59. //获取图片
  60. HBITMAP GetBitmap() { return m_StgMedium.hBitmap; }
  61. //获取信息
  62. bool IntercalateReObject(REOBJECT & ReObject, IOleClientSite * pIOleClientSite);
  63. };
  64. //////////////////////////////////////////////////////////////////////////////////
  65. //消息框类
  66. class SKINUI_CLASS CSkinRichEdit : public CRichEditCtrl,public ISkinControl
  67. {
  68. //接口变量
  69. protected:
  70. IRichEditOle * m_pIRichEditOLE; //接口指针
  71. //函数定义
  72. public:
  73. //构造函数
  74. CSkinRichEdit();
  75. //析构函数
  76. virtual ~CSkinRichEdit();
  77. //重载函数
  78. protected:
  79. //控件绑定
  80. virtual VOID PreSubclassWindow();
  81. //设置属性
  82. virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
  83. //创建控件
  84. virtual BOOL CreateControl(CWnd* pParentWnd);
  85. //功能函数
  86. public:
  87. //清除屏幕
  88. bool CleanScreen();
  89. //加载消息
  90. bool LoadMessage(LPCTSTR pszFileName);
  91. //保存信息
  92. bool SaveMessage(LPCTSTR pszFileName);
  93. //图片插入
  94. public:
  95. //插入图片
  96. bool InsertImage(LPCTSTR pszImage);
  97. //插入图片
  98. bool InsertImage(CBitmap * pBitmap);
  99. //插入对象
  100. bool InsertDataObject(CDataObject * pDataObject);
  101. //字串插入
  102. public:
  103. //插入字串
  104. bool InsertString(LPCTSTR pszString, COLORREF crTextColor);
  105. //插入字串
  106. bool InsertString(LPCTSTR pszString, COLORREF crTextColor, COLORREF crBackColor);
  107. //插入字串
  108. bool InsertString(LPCTSTR pszString, CHARFORMAT2 & CharFormat);
  109. //超级链接
  110. public:
  111. //插入字串
  112. bool InsertHyperLink(LPCTSTR pszString);
  113. //插入字串
  114. bool InsertHyperLink(LPCTSTR pszString, COLORREF crBackColor);
  115. //辅助函数
  116. protected:
  117. //加载回调
  118. static DWORD CALLBACK LoadCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb);
  119. //保存回调
  120. static DWORD CALLBACK SaveCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb);
  121. //内部函数
  122. protected:
  123. //字符判断
  124. bool EfficacyUrlChar(TCHAR chChar);
  125. //地址判断
  126. bool EfficacyUrlString(LPCTSTR pszUrl);
  127. //消息映射
  128. protected:
  129. //销毁消息
  130. VOID OnDestroy();
  131. //创建消息
  132. INT OnCreate(LPCREATESTRUCT lpCreateStruct);
  133. //右键消息
  134. VOID OnRButtonDown(UINT nFlags, CPoint point);
  135. //设置光标
  136. BOOL OnSetCursor(CWnd * pWnd, UINT nHitTest, UINT uMessage);
  137. //链接事件
  138. void OnURLClick(NMHDR *pNmhdr, LRESULT *pResult);
  139. DECLARE_MESSAGE_MAP()
  140. };
  141. //////////////////////////////////////////////////////////////////////////////////
  142. #endif