home *** CD-ROM | disk | FTP | other *** search
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
-
- #include "stdafx.h"
-
- #ifdef AFX_CMNCTL_SEG
- #pragma code_seg(AFX_CMNCTL_SEG)
- #endif
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- #define new DEBUG_NEW
-
- #ifndef _AFX_NO_RICHEDIT_SUPPORT
-
- /////////////////////////////////////////////////////////////////////////////
- // _AFX_RICHEDIT_STATE
-
- _AFX_RICHEDIT_STATE::~_AFX_RICHEDIT_STATE()
- {
- if (m_hInstRichEdit != NULL)
- ::FreeLibrary(m_hInstRichEdit);
- }
-
- _AFX_RICHEDIT_STATE* AFX_CDECL AfxGetRichEditState()
- {
- return _afxRichEditState.GetData();
- }
-
- BOOL PASCAL AfxInitRichEdit()
- {
- _AFX_RICHEDIT_STATE* pState = _afxRichEditState;
- if (pState->m_hInstRichEdit == NULL)
- pState->m_hInstRichEdit = LoadLibraryA("RICHED32.DLL");
- return pState->m_hInstRichEdit != NULL;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CRichEdit
-
- BOOL CRichEditCtrl::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
- {
- if (!AfxInitRichEdit())
- return FALSE;
-
- CWnd* pWnd = this;
- return pWnd->Create(_T("RICHEDIT"), NULL, dwStyle, rect, pParentWnd, nID);
- }
-
- int CRichEditCtrl::GetLine(int nIndex, LPTSTR lpszBuffer) const
- {
- ASSERT(::IsWindow(m_hWnd));
- return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex,
- (LPARAM)lpszBuffer);
- }
-
- int CRichEditCtrl::LineIndex(int nLine /* = -1 */) const
- {
- ASSERT(::IsWindow(m_hWnd));
- return (int)::SendMessage(m_hWnd, EM_LINEINDEX, nLine, 0);
- }
-
- int CRichEditCtrl::LineLength(int nLine /* = -1 */) const
- {
- ASSERT(::IsWindow(m_hWnd));
- return (int)::SendMessage(m_hWnd, EM_LINELENGTH, nLine, 0);
- }
-
- void CRichEditCtrl::LineScroll(int nLines, int nChars /* = 0 */)
- {
- ASSERT(::IsWindow(m_hWnd));
- ::SendMessage(m_hWnd, EM_LINESCROLL, nChars, nLines);
- }
-
- void CRichEditCtrl::SetSel(long nStartChar, long nEndChar)
- {
- ASSERT(::IsWindow(m_hWnd));
- CHARRANGE cr;
- cr.cpMin = nStartChar;
- cr.cpMax = nEndChar;
- ::SendMessage(m_hWnd, EM_EXSETSEL, 0, (LPARAM)&cr);
- }
-
- BOOL CRichEditCtrl::CanPaste(UINT nFormat) const
- {
- ASSERT(::IsWindow(m_hWnd));
- COleMessageFilter* pFilter = AfxOleGetMessageFilter();
- if (pFilter != NULL)
- pFilter->BeginBusyState();
- BOOL b = (BOOL)::SendMessage(m_hWnd, EM_CANPASTE, nFormat, 0L);
- if (pFilter != NULL)
- pFilter->EndBusyState();
- return b;
- }
-
- void CRichEditCtrl::PasteSpecial(UINT nClipFormat, DWORD dvAspect, HMETAFILE hMF)
- {
- ASSERT(::IsWindow(m_hWnd));
- REPASTESPECIAL reps;
- reps.dwAspect = dvAspect;
- reps.dwParam = (DWORD)hMF;
- ::SendMessage(m_hWnd, EM_PASTESPECIAL, nClipFormat, (LPARAM)&reps);
- }
-
- int CRichEditCtrl::GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const
- {
- ASSERT(::IsWindow(m_hWnd));
- *(LPINT)lpszBuffer = nMaxLength;
- return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
- }
-
- void CRichEditCtrl::GetSel(long& nStartChar, long& nEndChar) const
- {
- ASSERT(::IsWindow(m_hWnd));
- CHARRANGE cr;
- ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
- nStartChar = cr.cpMin;
- nEndChar = cr.cpMax;
- }
-
- CString CRichEditCtrl::GetSelText() const
- {
- ASSERT(::IsWindow(m_hWnd));
- CHARRANGE cr;
- cr.cpMin = cr.cpMax = 0;
- ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
- LPSTR lpsz = (char*)_alloca((cr.cpMax - cr.cpMin + 1)*2);
- lpsz[0] = NULL;
- ::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpsz);
- return lpsz;
- }
-
- IRichEditOle* CRichEditCtrl::GetIRichEditOle() const
- {
- ASSERT(::IsWindow(m_hWnd));
- IRichEditOle *pRichItem = NULL;
- ::SendMessage(m_hWnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pRichItem);
- return pRichItem;
- }
-
- BOOL CRichEditCtrl::SetDefaultCharFormat(CHARFORMAT &cf)
- {
- ASSERT(::IsWindow(m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, 0, (LPARAM)&cf);
- }
-
- BOOL CRichEditCtrl::SetSelectionCharFormat(CHARFORMAT &cf)
- {
- ASSERT(::IsWindow(m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
- }
-
- BOOL CRichEditCtrl::SetWordCharFormat(CHARFORMAT &cf)
- {
- ASSERT(::IsWindow(m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION|SCF_WORD, (LPARAM)&cf);
- }
-
- DWORD CRichEditCtrl::GetDefaultCharFormat(CHARFORMAT &cf) const
- {
- ASSERT(::IsWindow(m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 0, (LPARAM)&cf);
- }
-
- DWORD CRichEditCtrl::GetSelectionCharFormat(CHARFORMAT &cf) const
- {
- ASSERT(::IsWindow(m_hWnd));
- cf.cbSize = sizeof(CHARFORMAT);
- return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 1, (LPARAM)&cf);
- }
-
- DWORD CRichEditCtrl::GetParaFormat(PARAFORMAT &pf) const
- {
- ASSERT(::IsWindow(m_hWnd));
- pf.cbSize = sizeof(PARAFORMAT);
- return (DWORD)::SendMessage(m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
- }
-
- BOOL CRichEditCtrl::SetParaFormat(PARAFORMAT &pf)
- {
- ASSERT(::IsWindow(m_hWnd));
- pf.cbSize = sizeof(PARAFORMAT);
- return (BOOL)::SendMessage(m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
- }
-
- #endif //!_AFX_NO_RICHEDIT_SUPPORT
-
- /////////////////////////////////////////////////////////////////////////////
-
- #pragma warning(disable: 4074)
- #pragma init_seg(lib)
-
- #ifndef _AFX_NO_RICHEDIT_SUPPORT
- PROCESS_LOCAL(_AFX_RICHEDIT_STATE, _afxRichEditState)
- #endif
-
- /////////////////////////////////////////////////////////////////////////////
-