|
|
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1995 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"
#include "stdafx2.h"
#include "wordpad.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
/////////////////////////////////////////////////////////////////////////////
// _AFX_RICHEDIT2_STATE
_AFX_RICHEDIT2_STATE::~_AFX_RICHEDIT2_STATE() { if (m_hInstRichEdit != NULL) #ifndef _MAC
::FreeLibrary(m_hInstRichEdit); #else
REFreeLibrary(m_hInstRichEdit); #endif
}
_AFX_RICHEDIT2_STATE* AFX_CDECL AfxGetRichEdit2State() { return _afxRichEdit2State.GetData(); }
/////////////////////////////////////////////////////////////////////////////
// CRichEdit2
BOOL CRichEdit2Ctrl::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) { _AFX_RICHEDIT2_STATE* pState = _afxRichEdit2State; if (pState->m_hInstRichEdit == NULL) { pState->m_hInstRichEdit = LoadLibrary(L"RICHED20.DLL"); if (pState->m_hInstRichEdit == NULL) return FALSE; }
CWnd* pWnd = this;
return pWnd->Create(_T("RICHEDIT"), NULL, dwStyle, rect, pParentWnd, nID); }
int CRichEdit2Ctrl::GetLine(int nIndex, LPTSTR lpszBuffer) const { ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer); }
int CRichEdit2Ctrl::LineIndex(int nLine /* = -1 */) const { ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, EM_LINEINDEX, nLine, 0); }
int CRichEdit2Ctrl::LineLength(int nLine /* = -1 */) const { ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, EM_LINELENGTH, nLine, 0); }
void CRichEdit2Ctrl::LineScroll(int nLines, int nChars /* = 0 */) { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, EM_LINESCROLL, nChars, nLines); }
void CRichEdit2Ctrl::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 CRichEdit2Ctrl::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 CRichEdit2Ctrl::PasteSpecial(UINT nClipFormat, DWORD dvAspect, HMETAFILE hMF) { ASSERT(::IsWindow(m_hWnd)); REPASTESPECIAL reps; reps.dwAspect = dvAspect; reps.dwParam = (DWORD_PTR)hMF; ::SendMessage(m_hWnd, EM_PASTESPECIAL, nClipFormat, (LPARAM)&reps); }
int CRichEdit2Ctrl::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 CRichEdit2Ctrl::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 CRichEdit2Ctrl::GetSelText() const { ASSERT(::IsWindow(m_hWnd));
CHARRANGE cr; LPTSTR lpsz;
cr.cpMin = cr.cpMax = 0; ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
try { // Need to use sizeof(WCHAR) to include DBCS characters
lpsz = (TCHAR*)_alloca((cr.cpMax - cr.cpMin + 1)*sizeof(WCHAR));
// lpsz[0] = NULL;
//
// APPCOMPAT: The Ansi richedit2 control does not zero terminate the
// returned string if the current selection contains nothing
// but DBCS characters.
//
ZeroMemory(lpsz, (cr.cpMax - cr.cpMin + 1)*sizeof(WCHAR));
::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpsz); } catch(...) { //
// If _alloca fails it will throw an exception. It's ok to return a
// constant string here because it will immediately get copied into
// a CString.
//
_resetstkoflw(); lpsz = TEXT(""); }
return lpsz; }
IRichEditOle* CRichEdit2Ctrl::GetIRichEditOle() const { ASSERT(::IsWindow(m_hWnd)); IRichEditOle *pRichItem = NULL; ::SendMessage(m_hWnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pRichItem); return pRichItem; }
BOOL CRichEdit2Ctrl::SetDefaultCharFormat(CHARFORMAT &cf) { ASSERT(::IsWindow(m_hWnd)); cf.cbSize = sizeof(CHARFORMAT); return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, 0, (LPARAM)&cf); }
BOOL CRichEdit2Ctrl::SetSelectionCharFormat(CHARFORMAT &cf) { ASSERT(::IsWindow(m_hWnd)); cf.cbSize = sizeof(CHARFORMAT); return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); }
BOOL CRichEdit2Ctrl::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 CRichEdit2Ctrl::GetDefaultCharFormat(CHARFORMAT &cf) const { ASSERT(::IsWindow(m_hWnd)); cf.cbSize = sizeof(CHARFORMAT); return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 0, (LPARAM)&cf); }
DWORD CRichEdit2Ctrl::GetSelectionCharFormat(CHARFORMAT &cf) const { ASSERT(::IsWindow(m_hWnd)); cf.cbSize = sizeof(CHARFORMAT); return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 1, (LPARAM)&cf); }
DWORD CRichEdit2Ctrl::GetParaFormat(PARAFORMAT &pf) const { ASSERT(::IsWindow(m_hWnd)); pf.cbSize = sizeof(PARAFORMAT); return (DWORD)::SendMessage(m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf); }
BOOL CRichEdit2Ctrl::SetParaFormat(PARAFORMAT &pf) { ASSERT(::IsWindow(m_hWnd)); pf.cbSize = sizeof(PARAFORMAT); return (BOOL)::SendMessage(m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf); }
/////////////////////////////////////////////////////////////////////////////
#pragma warning(disable: 4074)
#pragma init_seg(lib)
PROCESS_LOCAL(_AFX_RICHEDIT2_STATE, _afxRichEdit2State)
/////////////////////////////////////////////////////////////////////////////
|