home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / mfc / src / winctrl4.cpp < prev    next >
C/C++ Source or Header  |  1998-06-16  |  6KB  |  212 lines

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10.  
  11. #include "stdafx.h"
  12.  
  13. #ifdef AFX_CMNCTL_SEG
  14. #pragma code_seg(AFX_CMNCTL_SEG)
  15. #endif
  16.  
  17. #ifdef _DEBUG
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21.  
  22. #define new DEBUG_NEW
  23.  
  24. #ifndef _AFX_NO_RICHEDIT_SUPPORT
  25.  
  26. /////////////////////////////////////////////////////////////////////////////
  27. // _AFX_RICHEDIT_STATE
  28.  
  29. _AFX_RICHEDIT_STATE::~_AFX_RICHEDIT_STATE()
  30. {
  31.     if (m_hInstRichEdit != NULL)
  32.         ::FreeLibrary(m_hInstRichEdit);
  33. }
  34.  
  35. _AFX_RICHEDIT_STATE* AFX_CDECL AfxGetRichEditState()
  36. {
  37.     return _afxRichEditState.GetData();
  38. }
  39.  
  40. BOOL PASCAL AfxInitRichEdit()
  41. {
  42.     _AFX_RICHEDIT_STATE* pState = _afxRichEditState;
  43.     if (pState->m_hInstRichEdit == NULL)
  44.         pState->m_hInstRichEdit = LoadLibraryA("RICHED32.DLL");
  45.     return pState->m_hInstRichEdit != NULL;
  46. }
  47.  
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CRichEdit
  50.  
  51. BOOL CRichEditCtrl::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
  52. {
  53.     if (!AfxInitRichEdit())
  54.         return FALSE;
  55.  
  56.     CWnd* pWnd = this;
  57.     return pWnd->Create(_T("RICHEDIT"), NULL, dwStyle, rect, pParentWnd, nID);
  58. }
  59.  
  60. int CRichEditCtrl::GetLine(int nIndex, LPTSTR lpszBuffer) const
  61. {
  62.     ASSERT(::IsWindow(m_hWnd));
  63.     return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex,
  64.         (LPARAM)lpszBuffer);
  65. }
  66.  
  67. int CRichEditCtrl::LineIndex(int nLine /* = -1 */) const
  68. {
  69.     ASSERT(::IsWindow(m_hWnd));
  70.     return (int)::SendMessage(m_hWnd, EM_LINEINDEX, nLine, 0);
  71. }
  72.  
  73. int CRichEditCtrl::LineLength(int nLine /* = -1 */) const
  74. {
  75.     ASSERT(::IsWindow(m_hWnd));
  76.     return (int)::SendMessage(m_hWnd, EM_LINELENGTH, nLine, 0);
  77. }
  78.  
  79. void CRichEditCtrl::LineScroll(int nLines, int nChars /* = 0 */)
  80. {
  81.     ASSERT(::IsWindow(m_hWnd));
  82.     ::SendMessage(m_hWnd, EM_LINESCROLL, nChars, nLines);
  83. }
  84.  
  85. void CRichEditCtrl::SetSel(long nStartChar, long nEndChar)
  86. {
  87.     ASSERT(::IsWindow(m_hWnd));
  88.     CHARRANGE cr;
  89.     cr.cpMin = nStartChar;
  90.     cr.cpMax = nEndChar;
  91.     ::SendMessage(m_hWnd, EM_EXSETSEL, 0, (LPARAM)&cr);
  92. }
  93.  
  94. BOOL CRichEditCtrl::CanPaste(UINT nFormat) const
  95. {
  96.     ASSERT(::IsWindow(m_hWnd));
  97.     COleMessageFilter* pFilter = AfxOleGetMessageFilter();
  98.     if (pFilter != NULL)
  99.         pFilter->BeginBusyState();
  100.     BOOL b = (BOOL)::SendMessage(m_hWnd, EM_CANPASTE, nFormat, 0L);
  101.     if (pFilter != NULL)
  102.         pFilter->EndBusyState();
  103.     return b;
  104. }
  105.  
  106. void CRichEditCtrl::PasteSpecial(UINT nClipFormat, DWORD dvAspect, HMETAFILE hMF)
  107. {
  108.     ASSERT(::IsWindow(m_hWnd));
  109.     REPASTESPECIAL reps;
  110.     reps.dwAspect = dvAspect;
  111.     reps.dwParam = (DWORD)hMF;
  112.     ::SendMessage(m_hWnd, EM_PASTESPECIAL, nClipFormat, (LPARAM)&reps);
  113. }
  114.  
  115. int CRichEditCtrl::GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const
  116. {
  117.     ASSERT(::IsWindow(m_hWnd));
  118.     *(LPINT)lpszBuffer = nMaxLength;
  119.     return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
  120. }
  121.  
  122. void CRichEditCtrl::GetSel(long& nStartChar, long& nEndChar) const
  123. {
  124.     ASSERT(::IsWindow(m_hWnd));
  125.     CHARRANGE cr;
  126.     ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
  127.     nStartChar = cr.cpMin;
  128.     nEndChar = cr.cpMax;
  129. }
  130.  
  131. CString CRichEditCtrl::GetSelText() const
  132. {
  133.     ASSERT(::IsWindow(m_hWnd));
  134.     CHARRANGE cr;
  135.     cr.cpMin = cr.cpMax = 0;
  136.     ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
  137.     LPSTR lpsz = (char*)_alloca((cr.cpMax - cr.cpMin + 1)*2);
  138.     lpsz[0] = NULL;
  139.     ::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpsz);
  140.     return lpsz;
  141. }
  142.  
  143. IRichEditOle* CRichEditCtrl::GetIRichEditOle() const
  144. {
  145.     ASSERT(::IsWindow(m_hWnd));
  146.     IRichEditOle *pRichItem = NULL;
  147.     ::SendMessage(m_hWnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pRichItem);
  148.     return pRichItem;
  149. }
  150.  
  151. BOOL CRichEditCtrl::SetDefaultCharFormat(CHARFORMAT &cf)
  152. {
  153.     ASSERT(::IsWindow(m_hWnd));
  154.     cf.cbSize = sizeof(CHARFORMAT);
  155.     return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, 0, (LPARAM)&cf);
  156. }
  157.  
  158. BOOL CRichEditCtrl::SetSelectionCharFormat(CHARFORMAT &cf)
  159. {
  160.     ASSERT(::IsWindow(m_hWnd));
  161.     cf.cbSize = sizeof(CHARFORMAT);
  162.     return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
  163. }
  164.  
  165. BOOL CRichEditCtrl::SetWordCharFormat(CHARFORMAT &cf)
  166. {
  167.     ASSERT(::IsWindow(m_hWnd));
  168.     cf.cbSize = sizeof(CHARFORMAT);
  169.     return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION|SCF_WORD, (LPARAM)&cf);
  170. }
  171.  
  172. DWORD CRichEditCtrl::GetDefaultCharFormat(CHARFORMAT &cf) const
  173. {
  174.     ASSERT(::IsWindow(m_hWnd));
  175.     cf.cbSize = sizeof(CHARFORMAT);
  176.     return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 0, (LPARAM)&cf);
  177. }
  178.  
  179. DWORD CRichEditCtrl::GetSelectionCharFormat(CHARFORMAT &cf) const
  180. {
  181.     ASSERT(::IsWindow(m_hWnd));
  182.     cf.cbSize = sizeof(CHARFORMAT);
  183.     return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 1, (LPARAM)&cf);
  184. }
  185.  
  186. DWORD CRichEditCtrl::GetParaFormat(PARAFORMAT &pf) const
  187. {
  188.     ASSERT(::IsWindow(m_hWnd));
  189.     pf.cbSize = sizeof(PARAFORMAT);
  190.     return (DWORD)::SendMessage(m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
  191. }
  192.  
  193. BOOL CRichEditCtrl::SetParaFormat(PARAFORMAT &pf)
  194. {
  195.     ASSERT(::IsWindow(m_hWnd));
  196.     pf.cbSize = sizeof(PARAFORMAT);
  197.     return (BOOL)::SendMessage(m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
  198. }
  199.  
  200. #endif //!_AFX_NO_RICHEDIT_SUPPORT
  201.  
  202. /////////////////////////////////////////////////////////////////////////////
  203.  
  204. #pragma warning(disable: 4074)
  205. #pragma init_seg(lib)
  206.  
  207. #ifndef _AFX_NO_RICHEDIT_SUPPORT
  208. PROCESS_LOCAL(_AFX_RICHEDIT_STATE, _afxRichEditState)
  209. #endif
  210.  
  211. /////////////////////////////////////////////////////////////////////////////
  212.