188 lines
4.6 KiB
C++
188 lines
4.6 KiB
C++
//
|
||
// TXTED.HPP
|
||
// Text Object Editor
|
||
//
|
||
// Copyright Microsoft 1998-
|
||
//
|
||
#ifndef __TXTED_HPP_
|
||
#define __TXTED_HPP_
|
||
|
||
|
||
|
||
#define MIN_IME_WINDOW 30
|
||
|
||
#define MIN_FITBOX_CHARS 6
|
||
|
||
class WbTextEditor;
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// WbTextBox window
|
||
|
||
class WbTextBox
|
||
{
|
||
public:
|
||
WbTextBox(WbTextEditor * pEditor);
|
||
~WbTextBox();
|
||
|
||
BOOL Create(HWND hwndParent);
|
||
|
||
BOOL FitBox( void );
|
||
|
||
void AutoCaretScroll( void );
|
||
|
||
int GetMaxCharHeight( void );
|
||
|
||
int GetMaxCharWidth( void );
|
||
|
||
void AbortEditGently( void );
|
||
|
||
HWND m_hwnd;
|
||
POINT m_ptNTBooger;
|
||
|
||
friend LRESULT CALLBACK TextWndProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
||
WNDPROC m_pfnEditPrev;
|
||
|
||
protected:
|
||
RECT m_MaxRect;
|
||
WbTextEditor *m_pEditor;
|
||
RECT m_rectErase;
|
||
BOOL m_bInIME;
|
||
BOOL m_bDontEscapeThisTime;
|
||
|
||
void SetupBackgroundRepaint( POINT ptTopPaint, BOOL bNumLinesChanged=TRUE );
|
||
void SelectAtLeastOne( void );
|
||
|
||
void OnClearCut(void);
|
||
void OnUndoPaste(void);
|
||
void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
void OnTimer(UINT_PTR nIDEvent);
|
||
void OnLButtonUp(UINT nFlags, int x, int y);
|
||
void OnMouseMove(UINT nFlags, int x, int y);
|
||
void OnMove(int x, int y);
|
||
void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
};
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
//
|
||
//
|
||
// Class: WbTextEditor
|
||
//
|
||
// Purpose: Allow editing of the text in a DCWbGraphicText object
|
||
//
|
||
//
|
||
class WbTextEditor : public DCWbGraphicText
|
||
{
|
||
friend class WbTextBox;
|
||
friend class WbDrawingArea;
|
||
|
||
public:
|
||
//
|
||
// Constructor
|
||
//
|
||
WbTextEditor(void);
|
||
~WbTextEditor(void);
|
||
|
||
// writes text to underlying text object before relaying to text object
|
||
DWORD CalculateExternalLength(void);
|
||
|
||
// calcs bounds rect and sets editbox to new size
|
||
void CalculateBoundsRect(void);
|
||
|
||
void WriteExtra( PWB_GRAPHIC pHeader );
|
||
|
||
void SetTimer( UINT nElapse );
|
||
void KillTimer( void );
|
||
|
||
// set editbox visibility
|
||
void ShowBox( int nShow );
|
||
|
||
BOOL Create( void );
|
||
|
||
// Moves underlying text object and then moves editbox rect
|
||
void MoveBy(int cx, int cy);
|
||
|
||
void RedrawEditbox(void);
|
||
|
||
// resets editbox for parent resizing
|
||
void ParentResize( void );
|
||
|
||
// clipboard
|
||
void Copy( void )
|
||
{ ::SendMessage(m_pEditBox->m_hwnd, WM_COPY, 0, 0); }
|
||
|
||
void Cut( void )
|
||
{ ::SendMessage(m_pEditBox->m_hwnd, WM_CUT, 0, 0); }
|
||
|
||
void Paste( void )
|
||
{ ::SendMessage(m_pEditBox->m_hwnd, WM_PASTE, 0, 0); }
|
||
|
||
virtual void SetFont( LOGFONT *pLogFont, BOOL bDummy=TRUE );
|
||
virtual void SetFont(HFONT hFont) { DCWbGraphicText::SetFont(hFont); }
|
||
|
||
//
|
||
// Attach a text object to the editor. This function copies the
|
||
// contents of the specified text object into the text editor. The
|
||
// editor will not alter the contents of the object passed and does not
|
||
// keep a copy of the pointer parameter.
|
||
//
|
||
BOOL SetTextObject(DCWbGraphicText * ptext);
|
||
|
||
//
|
||
// Return the width and height for the cursor in pixels as a size
|
||
//
|
||
void GetCursorSize(LPSIZE lpsize);
|
||
|
||
//
|
||
// Set the current edit cursor position from a point specified in
|
||
// logical co-ordinates. This function does nothing if the point
|
||
// specified is outside the bounding rectangle of the object being
|
||
// edited. If the point specified is within the bounding rectangle the
|
||
// current edit cursor position is updated to a point as close as
|
||
// possible to that passed as parameter.
|
||
//
|
||
void SetCursorPosFromPoint(POINT pointXY);
|
||
|
||
void Clear(void); // Delete all text
|
||
BOOL New(void); // Delete text and reset handles
|
||
|
||
//
|
||
// Return TRUE if there is not text in the object
|
||
//
|
||
BOOL IsEmpty(void);
|
||
|
||
void AbortEditGently( void )
|
||
{m_pEditBox->AbortEditGently();}
|
||
|
||
|
||
protected:
|
||
//
|
||
// Pixel position from a character position
|
||
//
|
||
void GetXYPosition(POINT pointChar, LPPOINT lpptGet);
|
||
|
||
//
|
||
// Current cursor position. Note that cursorCharPos.x gives the BYTE
|
||
// position of the cursor rather than the character position. On SBCS
|
||
// systems the character and byte positions will always be the same,
|
||
// but on DBCS systems the number of bytes in a string can be greater
|
||
// than the number of characters.
|
||
//
|
||
// cursorCharPos.x should NEVER be set to a byte count which is in the
|
||
// middle of a double byte character.
|
||
//
|
||
POINT m_cursorCharPos;
|
||
POINT m_cursorXYPos;
|
||
|
||
WbTextBox *m_pEditBox;
|
||
int m_nLastShow;
|
||
void PutText(void);
|
||
void GetText(void);
|
||
};
|
||
|
||
|
||
#endif // __TXTED_HPP_
|
||
|