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_
|
|||
|
|