XTPSyntaxEditSelection.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:18k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPSyntaxEditSelection.h: interface for the CXTPSyntaxEditAutoCompleteWnd class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME SYNTAX EDIT LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. //////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPSYNTAXEDITSELECTION_H__)
  22. #define __XTPSYNTAXEDITSELECTION_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPSyntaxEditStruct.h"
  28. #include <imm.h>
  29. //{{AFX_CODEJOCK_PRIVATE
  30. //}}AFX_CODEJOCK_PRIVATE
  31. //===========================================================================
  32. // Summary:
  33. //      This class used to represent syntax edit text selection.
  34. //      It allow to get and set selection properties in 2 measurements:
  35. //      string and display. Also selection may be 'Normal' if its start less
  36. //      then its end, and 'Reverse' otherwise.
  37. //===========================================================================
  38. class _XTP_EXT_CLASS CXTPSyntaxEditSelection : public CXTPCmdTarget
  39. {
  40. //{{AFX_CODEJOCK_PRIVATE
  41. friend class CXTPSyntaxEditCtrl;
  42. friend class CXTPSyntaxEditSelection;
  43. DECLARE_DYNAMIC(CXTPSyntaxEditSelection)
  44. //}}AFX_CODEJOCK_PRIVATE
  45. public:
  46. //-----------------------------------------------------------------------
  47. // Summary:
  48. //     Default object constructor.
  49. //-----------------------------------------------------------------------
  50. CXTPSyntaxEditSelection();
  51. //-----------------------------------------------------------------------
  52. // Summary:
  53. //      Copy constructor.
  54. // Parameters:
  55. //      rSrc - [in] A reference to source object.
  56. //-----------------------------------------------------------------------
  57. CXTPSyntaxEditSelection(const CXTPSyntaxEditSelection& rSrc);
  58. //-----------------------------------------------------------------------
  59. // Summary:
  60. //     Default object destructor.
  61. //-----------------------------------------------------------------------
  62. virtual ~CXTPSyntaxEditSelection();
  63. //-----------------------------------------------------------------------
  64. // Summary:
  65. //      Get the selection start position where column is a zero based
  66. //      char index in the string.
  67. // Returns:
  68. //      A reference to XTP_EDIT_LINECOL object which contains selection start.
  69. // See Also:
  70. //      GetEnd_str, GetStart_disp, GetEnd_disp, GetNormalStart_str,
  71. //      GetNormalStart_disp, GetNormalEnd_str, GetNormalEnd_disp,
  72. //      SetStart_str, SetStart_disp, SetEnd_str, SetEnd_disp,
  73. //      Reset_str, Reset_disp
  74. //-----------------------------------------------------------------------
  75. const XTP_EDIT_LINECOL& GetStart_str();
  76. //-----------------------------------------------------------------------
  77. // Summary:
  78. //      Get the selection end position where column is a zero based
  79. //      char index in the string.
  80. // Returns:
  81. //      A reference to XTP_EDIT_LINECOL object which contains selection end.
  82. // See Also:
  83. //      GetStart_str, GetStart_disp, GetEnd_disp, GetNormalStart_str,
  84. //      GetNormalStart_disp, GetNormalEnd_str, GetNormalEnd_disp,
  85. //      SetStart_str, SetStart_disp, SetEnd_str, SetEnd_disp,
  86. //      Reset_str, Reset_disp
  87. //-----------------------------------------------------------------------
  88. const XTP_EDIT_LINECOL& GetEnd_str();
  89. //-----------------------------------------------------------------------
  90. // Summary:
  91. //      Get the selection start position where column is a 1 based
  92. //      column index on the screen.
  93. // Returns:
  94. //      A reference to XTP_EDIT_LINECOL object which contains selection start.
  95. // See Also:
  96. //      GetStart_str, GetEnd_str, GetEnd_disp, GetNormalStart_str,
  97. //      GetNormalStart_disp, GetNormalEnd_str, GetNormalEnd_disp,
  98. //      SetStart_str, SetStart_disp, SetEnd_str, SetEnd_disp,
  99. //      Reset_str, Reset_disp
  100. //-----------------------------------------------------------------------
  101. const XTP_EDIT_LINECOL& GetStart_disp();
  102. //-----------------------------------------------------------------------
  103. // Summary:
  104. //      Get the selection end position where column is a 1 based
  105. //      column index on the screen.
  106. // Returns:
  107. //      A reference to XTP_EDIT_LINECOL object which contains selection end.
  108. // See Also:
  109. //      GetStart_str, GetEnd_str, GetStart_disp, GetNormalStart_str,
  110. //      GetNormalStart_disp, GetNormalEnd_str, GetNormalEnd_disp,
  111. //      SetStart_str, SetStart_disp, SetEnd_str, SetEnd_disp,
  112. //      Reset_str, Reset_disp
  113. //-----------------------------------------------------------------------
  114. const XTP_EDIT_LINECOL& GetEnd_disp();
  115. //-----------------------------------------------------------------------
  116. // Summary:
  117. //      Get the normalized selection start.
  118. // Returns:
  119. //      A reference to XTP_EDIT_LINECOL object which contains normalized
  120. //      selection start.
  121. // See Also:
  122. //      GetStart_str, GetEnd_str, GetStart_disp, GetEnd_disp, GetNormalEnd_str,
  123. //      GetNormalEnd_disp, SetStart_str, SetStart_disp, SetEnd_str, SetEnd_disp,
  124. //      Reset_str, Reset_disp
  125. //-----------------------------------------------------------------------
  126. XTP_EDIT_LINECOL GetNormalStart_str();
  127. XTP_EDIT_LINECOL GetNormalStart_disp();//<COMBINE GetNormalStart_str>
  128. //-----------------------------------------------------------------------
  129. // Summary:
  130. //      Get the normalized selection end.
  131. // Returns:
  132. //      A reference to XTP_EDIT_LINECOL object which contains normalized
  133. //      selection end.
  134. // See Also:
  135. //      GetStart_str, GetEnd_str, GetStart_disp, GetEnd_disp, GetNormalStart_str,
  136. //      GetNormalStart_disp, SetStart_str, SetStart_disp, SetEnd_str, SetEnd_disp,
  137. //      Reset_str, Reset_disp
  138. //-----------------------------------------------------------------------
  139. XTP_EDIT_LINECOL GetNormalEnd_str();
  140. XTP_EDIT_LINECOL GetNormalEnd_disp();//<COMBINE GetNormalEnd_str>
  141. //-----------------------------------------------------------------------
  142. // Summary:
  143. //      Set the selection start position.
  144. // Parameters:
  145. //      nTextRow - A text row number.
  146. //      nStrPos  - A zero based char index in the string.
  147. //      nDispCol - A 1 based column index on the screen.
  148. // See Also:
  149. //      SetEnd_str, SetEnd_disp, GetStart_str, GetEnd_str, GetStart_disp,
  150. //      GetEnd_disp, GetNormalStart_str, GetNormalStart_disp, GetNormalEnd_str,
  151. //      GetNormalEnd_disp, Reset_str, Reset_disp
  152. //-----------------------------------------------------------------------
  153. void SetStart_str(int nTextRow, int nStrPos);
  154. void SetStart_disp(int nTextRow, int nDispCol); //<COMBINE SetStart_str@int@int>
  155. //-----------------------------------------------------------------------
  156. // Summary:
  157. //      Set the selection end position.
  158. // Parameters:
  159. //      nTextRow - A text row number.
  160. //      nStrPos  - A zero based char index in the string.
  161. //      nDispCol - A 1 based column index on the screen.
  162. // See Also:
  163. //      SetStart_str, SetStart_disp, GetStart_str, GetEnd_str, GetStart_disp,
  164. //      GetNormalStart_str, GetNormalStart_disp, GetNormalEnd_str,
  165. //      GetNormalEnd_disp, Reset_str, Reset_disp
  166. //-----------------------------------------------------------------------
  167. void SetEnd_str(int nTextRow, int nStrPos);
  168. void SetEnd_disp(int nTextRow, int nDispCol); //<COMBINE SetEnd_str@int@int>
  169. //-----------------------------------------------------------------------
  170. // Summary:
  171. //      Set the selection start and end positions. The selection is empty
  172. //      in this case.
  173. // Parameters:
  174. //      nTextRow - A text row number.
  175. //      nStrPos  - A zero based char index in the string.
  176. //      nDispCol - A 1 based column index on the screen.
  177. // See Also:
  178. //      SetStart_str, SetStart_disp, GetStart_str, GetEnd_str, GetStart_disp,
  179. //      GetEnd_disp, GetNormalStart_str, GetNormalStart_disp, GetNormalEnd_str,
  180. //      GetNormalEnd_disp
  181. //-----------------------------------------------------------------------
  182. void Reset_str(int nTextRow, int nStrPos);
  183. void Reset_disp(int nTextRow, int nDispCol); //<COMBINE Reset_str@int@int>
  184. //-----------------------------------------------------------------------
  185. // Summary:
  186. //      Used to determine is selection mode 'Word' (enabled by press and
  187. //      hold Ctrl before selecting).
  188. // Returns:
  189. //      TRUE if selection mode is 'Word', FALSE otherwise.
  190. //-----------------------------------------------------------------------
  191. BOOL IsWordSelectionMode() const;
  192. //-----------------------------------------------------------------------
  193. // Summary:
  194. //      Used to determine is selection mode 'Block' (enabled by press and
  195. //      hold Alt before selecting).
  196. // Returns:
  197. //      TRUE if selection mode is 'Block', FALSE otherwise.
  198. //-----------------------------------------------------------------------
  199. BOOL IsbBlockSelectionMode() const;
  200. //-----------------------------------------------------------------------
  201. // Summary:
  202. //      Used to determine is selection exists (start != end).
  203. // Returns:
  204. //      TRUE if selection  exists, FALSE otherwise.
  205. //-----------------------------------------------------------------------
  206. BOOL IsSelExist();
  207. //-----------------------------------------------------------------------
  208. // Summary:
  209. //      Used to determine is selection 'Normal' (start < end).
  210. // Returns:
  211. //      TRUE if selection  'Normal', FALSE otherwise.
  212. //-----------------------------------------------------------------------
  213. BOOL IsSelNormal();
  214. //-----------------------------------------------------------------------
  215. // Summary:
  216. //      Use this member function to determine is specified position inside
  217. //      the selection.
  218. // Parameters:
  219. //      nTextRow - A text row number.
  220. //      nStrPos  - A zero based char index in the string.
  221. //      nDispCol - A 1 based column index on the screen.
  222. // Returns:
  223. //      TRUE if specified position inside the selection, FALSE otherwise.
  224. //-----------------------------------------------------------------------
  225. // See Also:
  226. //      IsIntersectSel_str, IsIntersectSel_disp
  227. //-----------------------------------------------------------------------
  228. BOOL IsInSel_str(int nTextRow, int nStrPos);
  229. BOOL IsInSel_disp(int nTextRow, int nDispCol); //<COMBINE IsInSel_str@int@int>
  230. //-----------------------------------------------------------------------
  231. // Summary:
  232. //      Use this member function to determine is specified text range
  233. //      intersect the selection.
  234. // Parameters:
  235. //      nTextRow  - A text row number.
  236. //      nStrPos1  - Begin text range position (as zero based char index in the string).
  237. //      nStrPos2  - End text range position (as zero based char index in the string).
  238. //      nDispCol1 - Begin text range position (as 1 based column index on the screen).
  239. //      nDispCol2 - End text range position (as 1 based column index on the screen).
  240. // Returns:
  241. //      TRUE if specified text range intersect the selection, FALSE otherwise.
  242. // See Also:
  243. //      IsIntersectSel_str, IsIntersectSel_disp
  244. //-----------------------------------------------------------------------
  245. BOOL IsIntersectSel_str(int nTextRow, int nStrPos1, int nStrPos2);
  246. BOOL IsIntersectSel_disp(int nTextRow, int nDispCol1, int nDispCol2); //<COMBINE IsIntersectSel_str@int@int>
  247. //-----------------------------------------------------------------------
  248. // Summary:
  249. //     Equality operator.
  250. // Parameters:
  251. //     rSrc - Second CXTPSyntaxEditSelection object to compare.
  252. // Remarks:
  253. //     Compare 2 CXTPSyntaxEditSelection objects.
  254. // Returns:
  255. //     TRUE if specified objects are equal, otherwise FALSE.
  256. //-----------------------------------------------------------------------
  257. BOOL operator==(const CXTPSyntaxEditSelection& rSrc) const;
  258. //-----------------------------------------------------------------------
  259. // Summary:
  260. //     Non-Equality operator.
  261. // Parameters:
  262. //     rSrc - Second CXTPSyntaxEditSelection object to compare.
  263. // Remarks:
  264. //     Compare 2 CXTPSyntaxEditSelection objects.
  265. // Returns:
  266. //     TRUE if specified objects are not equal, otherwise FALSE.
  267. //-----------------------------------------------------------------------
  268. BOOL operator!=(const CXTPSyntaxEditSelection& rSrc) const;
  269. //-----------------------------------------------------------------------
  270. // Summary:
  271. //     Copy operator.
  272. // Parameters:
  273. //     rSrc - The source object.
  274. // Remarks:
  275. //     Initialize members from the specified object.
  276. // Returns:
  277. //     Reference to the current object.
  278. //-----------------------------------------------------------------------
  279. const CXTPSyntaxEditSelection& operator=(const CXTPSyntaxEditSelection& rSrc);
  280. //{{AFX_CODEJOCK_PRIVATE
  281. int GetSelStartForRow_str(int nTextRow, int nDispLine);
  282. int GetSelEndForRow_str(int nTextRow, int nDispLine, BOOL* pbInfinitSelEnd);
  283. //}}AFX_CODEJOCK_PRIVATE
  284. protected:
  285. //{{AFX_CODEJOCK_PRIVATE
  286. BOOL _IsInSel(BOOL bStr, int nTextRow, int nColX);
  287. BOOL _IsIntersectSel(BOOL bStr, int nTextRow, int nCol1, int nCol2);
  288. //}}AFX_CODEJOCK_PRIVATE
  289. protected:
  290. BOOL bSelectingRunning;             // Stores 'SelectingRunning' mode
  291. BOOL bWordSelectionMode;            // Stores 'Word' selecting mode
  292. BOOL bBlockSelectionMode;           // Stores 'Block' selecting mode
  293. int  nSelStartTextRowFromLeftBar;   // Stores start selection line for full line selecting (from the left bar).
  294. private:
  295. CXTPSyntaxEditCtrl* m_pOwnerCtrl;
  296. XTP_EDIT_LINECOL    selStart_disp;
  297. XTP_EDIT_LINECOL    selEnd_disp;
  298. XTP_EDIT_LINECOL    selStart_str;
  299. XTP_EDIT_LINECOL    selEnd_str;
  300. protected:
  301. };
  302. //////////////////////////////////////////////////////////////////////////
  303. AFX_INLINE const XTP_EDIT_LINECOL& CXTPSyntaxEditSelection::GetStart_str() {
  304. return selStart_str;
  305. }
  306. AFX_INLINE const XTP_EDIT_LINECOL& CXTPSyntaxEditSelection::GetEnd_str() {
  307. return selEnd_str;
  308. }
  309. AFX_INLINE const XTP_EDIT_LINECOL& CXTPSyntaxEditSelection::GetStart_disp() {
  310. return selStart_disp;
  311. }
  312. AFX_INLINE const XTP_EDIT_LINECOL& CXTPSyntaxEditSelection::GetEnd_disp() {
  313. return selEnd_disp;
  314. }
  315. AFX_INLINE BOOL CXTPSyntaxEditSelection::IsWordSelectionMode() const {
  316. return bWordSelectionMode;
  317. }
  318. AFX_INLINE BOOL CXTPSyntaxEditSelection::IsbBlockSelectionMode() const {
  319. return bBlockSelectionMode;
  320. }
  321. AFX_INLINE XTP_EDIT_LINECOL CXTPSyntaxEditSelection::GetNormalStart_str() {
  322. if (bBlockSelectionMode)
  323. return XTP_EDIT_LINECOL::min2(selStart_str, selEnd_str);
  324. return selStart_str <= selEnd_str ? selStart_str : selEnd_str;
  325. }
  326. AFX_INLINE XTP_EDIT_LINECOL CXTPSyntaxEditSelection::GetNormalEnd_str() {
  327. if (bBlockSelectionMode)
  328. return XTP_EDIT_LINECOL::max2(selStart_str, selEnd_str);
  329. return selEnd_str <= selStart_str ? selStart_str : selEnd_str;
  330. }
  331. AFX_INLINE XTP_EDIT_LINECOL CXTPSyntaxEditSelection::GetNormalStart_disp() {
  332. if (bBlockSelectionMode)
  333. return XTP_EDIT_LINECOL::min2(selStart_disp, selEnd_disp);
  334. return selStart_disp <= selEnd_disp ? selStart_disp : selEnd_disp;
  335. }
  336. AFX_INLINE XTP_EDIT_LINECOL CXTPSyntaxEditSelection::GetNormalEnd_disp() {
  337. if (bBlockSelectionMode)
  338. return XTP_EDIT_LINECOL::max2(selStart_disp, selEnd_disp);
  339. return selEnd_disp <= selStart_disp ? selStart_disp : selEnd_disp;
  340. }
  341. AFX_INLINE BOOL CXTPSyntaxEditSelection::IsSelNormal() {
  342. return selStart_disp <= selEnd_disp;
  343. }
  344. AFX_INLINE BOOL CXTPSyntaxEditSelection::IsInSel_str(int nTextRow, int nStrPos) {
  345. ASSERT(nStrPos >= 0);
  346. return _IsInSel(TRUE, nTextRow, nStrPos);
  347. }
  348. AFX_INLINE BOOL CXTPSyntaxEditSelection::IsInSel_disp(int nTextRow, int nDispCol) {
  349. return _IsInSel(FALSE, nTextRow, nDispCol);
  350. }
  351. AFX_INLINE BOOL CXTPSyntaxEditSelection::IsIntersectSel_str(int nTextRow, int nStrPos1, int nStrPos2) {
  352. return _IsIntersectSel(TRUE, nTextRow, nStrPos1, nStrPos2);
  353. }
  354. AFX_INLINE BOOL CXTPSyntaxEditSelection::IsIntersectSel_disp(int nTextRow, int nDispCol1, int nDispCol2) {
  355. return _IsIntersectSel(FALSE, nTextRow, nDispCol1, nDispCol2);
  356. }
  357. //{{AFX_CODEJOCK_PRIVATE
  358. class _XTP_EXT_CLASS CXTPImmWrapper
  359. {
  360. public:
  361. CXTPImmWrapper();
  362. virtual ~CXTPImmWrapper();
  363. BOOL ImmIsIME(HKL hKL = NULL);
  364. XTP_HIMC ImmGetContext(HWND hWnd);
  365. BOOL ImmReleaseContext(HWND hWnd, XTP_HIMC hIMC);
  366. BOOL ImmSetCompositionWindow(XTP_HIMC hIMC, COMPOSITIONFORM* pCompForm);
  367. BOOL ImmSetCompositionFont(XTP_HIMC hIMC, LOGFONT* plfFont);
  368. public:
  369. typedef BOOL     (WINAPI *PFN_ImmIsIME)(HKL);
  370. typedef XTP_HIMC (WINAPI *PFN_ImmGetContext)(HWND);
  371. typedef BOOL     (WINAPI *PFN_ImmReleaseContext)(HWND, XTP_HIMC);
  372. typedef BOOL     (WINAPI *PFN_ImmSetCompositionFont)(XTP_HIMC, LPLOGFONT); // A/W
  373. typedef BOOL     (WINAPI *PFN_ImmSetCompositionWindow)(XTP_HIMC, COMPOSITIONFORM*);
  374. protected:
  375. HMODULE m_hImmDll;         // Handle to the imm32 dll.
  376. PFN_ImmIsIME                m_pfnImmIsIME;
  377. PFN_ImmGetContext           m_pfnImmGetContext;
  378. PFN_ImmReleaseContext       m_pfnImmReleaseContext;
  379. PFN_ImmSetCompositionFont   m_pfnImmSetCompositionFont;
  380. PFN_ImmSetCompositionWindow m_pfnImmSetCompositionWindow;
  381. };
  382. //}}AFX_CODEJOCK_PRIVATE
  383. #endif // !defined(__XTPSYNTAXEDITSELECTION_H__)