2025-11-28 00:35:46 +09:00

145 lines
3.3 KiB
C++

#pragma once
#include "TextLayout.h"
#include "TextContainer.h"
#include "TextStore.h"
#include "TextEditSink.h"
//----------------------------------------------------------------
//
//
//
//----------------------------------------------------------------
class CTextEditor : public CTextContainer
{
public:
CTextEditor()
{
_nSelStart = 0;
_nSelEnd = 0;
_pTextStore = NULL;
_pDocumentMgr = NULL;
_pCompositionRenderInfo = NULL;
_nCompositionRenderInfo = 0;
_nCompStart = 0;
_nCompEnd = 0;
}
~CTextEditor()
{
if (_pTextStore)
{
_pTextStore->Release();
_pTextStore = NULL;
}
if (_pDocumentMgr)
{
_pDocumentMgr->Release();
_pDocumentMgr = NULL;
}
}
void MoveSelection(UINT nSelStart, UINT nSelEnd);
BOOL MoveSelectionAtPoint(POINT pt);
BOOL InsertAtSelection(LPCWSTR psz);
BOOL DeleteAtSelection(BOOL fBack);
BOOL DeleteSelection();
BOOL InsertResultAtComposition(LPCWSTR psz);
BOOL UpdateComposition(LPCWSTR psz, LONG lDeltaStart, LONG lCursorPos,
const BYTE *prgAttr, LONG lAttr, const LONG *prgClauseInfo, LONG lClauseInfo);
void OnStartComposition()
{
_nCompStart = _nSelStart;
_nCompEnd = _nSelEnd;
}
void MoveSelectionNext();
void MoveSelectionPrev();
BOOL MoveSelectionUpDown(BOOL bUp);
BOOL MoveSelectionToLineFirstEnd(BOOL bFirst);
void MoveSelectionToComposition()
{
MoveSelection(_nCompStart, _nCompEnd);
}
void Render(HDC hdc, const LOGFONT *plf);
void UpdateLayout(const LOGFONT *plf);
UINT GetSelectionStart() {return _nSelStart;}
UINT GetSelectionEnd() {return _nSelEnd;}
void BlinkCaret(HDC hdc)
{
_layout.BlinkCaret(hdc);
}
void SetInterimCaret(BOOL fSet)
{
_layout.SetInterimCaret(fSet, _nSelStart);
}
void SetWnd(HWND hwnd) {_hwnd = hwnd;}
HWND GetWnd() {return _hwnd;}
BOOL InitTSF();
BOOL UninitTSF();
void SetFocusDocumentMgr();
void InvalidateRect()
{
::InvalidateRect(_hwnd, NULL, TRUE);
}
int GetLineHeight() {return _layout.GetLineHeight();}
CTextLayout *GetLayout() {return &_layout;}
void ClearCompositionRenderInfo();
BOOL AddCompositionRenderInfo(int nStart, int nEnd, TF_DISPLAYATTRIBUTE *pda);
void TerminateCompositionString();
void AleartMouseSink(POINT pt, DWORD dwBtnState, BOOL *pbEaten);
// Level 2 support
void SetCompositionForm();
void SetCandidateForm();
void FlushCompositionString();
void QueryCharPosition(IMECHARPOSITION *pcpos);
ULONG OnDocumentFeed(RECONVERTSTRING *pReconv);
ULONG OnReconvertString(RECONVERTSTRING *pReconv);
ULONG OnConfirmReconvertString(RECONVERTSTRING *pReconv);
WPARAM PointToMouseWPARAM(POINT pt);
private:
UINT _nSelStart;
UINT _nSelEnd;
HWND _hwnd;
UINT _nCompStart;
UINT _nCompEnd;
CTextLayout _layout;
CTextStore *_pTextStore;
ITfDocumentMgr *_pDocumentMgr;
ITfContext *_pInputContext;
TfEditCookie _ecTextStore;
CTextEditSink *_pTextEditSink;
COMPOSITIONRENDERINFO *_pCompositionRenderInfo;
int _nCompositionRenderInfo;
};