windows-nt/Source/XPSP1/NT/shell/osshell/accesory/mspaint/tedit.h
2020-09-26 16:20:57 +08:00

240 lines
7 KiB
C++

// tedit.h : interface of the CTedit class
//
// This class takes text entry from the user.
// It is derived from the CEdit class
//
#ifndef __TEDIT_H__
#define __TEDIT_H__
// default position for text box
#define INITX 10
#define INITY 10
#define INITCX 100
#define INITCY 50
#define MIN_CHARS_DISPLAY_SIZE 5 // minimum size is 5 chars with the default font
#define WM_MOVING 0x0216
//#define EM_POSFROMCHAR 0x00D6
//#define EM_CHARFROMPOS 0x00D7
#define IS_DBCS_CHARSET( charset ) ( (charset == GB2312_CHARSET) || \
(charset == SHIFTJIS_CHARSET) || \
(charset == HANGEUL_CHARSET) || \
(charset == CHINESEBIG5_CHARSET) )
class CTedit;
class CTfont;
typedef enum
{
eEBOX_CHANGE,
eFONT_CHANGE,
eSIZE_MOVE_CHANGE,
eNO_CHANGE
} eLASTACTION;
/******************************************************************************/
class CAttrEdit : public CEdit
{
public:
BOOL m_bBackgroundTransparent;
UINT m_uiLastChar[2];
CRect m_rectUpdate;
CTedit* m_pParentWnd;
CString m_strResult;
HKL m_hKL;
BOOL m_bMouseDown;
HCURSOR m_hHCursor;
HCURSOR m_hVCursor;
HCURSOR m_hOldCursor;
CRect m_rectFmt;
int m_iPrevStart;
int m_iTabPos;
BOOL m_bResizeOnly; // when IME composition will
// force a resize
CAttrEdit::CAttrEdit();
DECLARE_DYNCREATE( CAttrEdit )
protected: // create from serialization only
//{{AFX_MSG(CAttrEdit)
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd ( CDC* pDC );
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnChar (UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg LRESULT OnImeChar ( WPARAM wParam, LPARAM lParam );
afx_msg LRESULT OnImeComposition ( WPARAM wParam, LPARAM lParam );
afx_msg LRESULT OnInputLangChange ( WPARAM wParam, LPARAM lParam );
afx_msg void OnKillFocus ( CWnd* pNewWnd );
afx_msg UINT OnNcHitTest ( CPoint point );
afx_msg void OnSetFocus ( CWnd* pOldWnd );
afx_msg void OnSize ( UINT nType, int cx, int cy );
afx_msg void OnLButtonDblClk ( UINT nFlags, CPoint point );
afx_msg void OnLButtonDown ( UINT nFlags, CPoint point );
afx_msg void OnMouseMove ( UINT nFlags, CPoint point );
afx_msg void OnLButtonUp ( UINT nFlags, CPoint point );
afx_msg void OnKeyDown ( UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg LRESULT OnSysTimer ( WPARAM wParam, LPARAM lParam );
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
void SetHCursorShape ( void );
void SetVCursorShape ( void );
void UpdateSel ( void );
void UpdateInput ( void );
void SetStartSelect ( void );
void SetCaretPosition ( BOOL bPrev, CPoint *ptMouse, int iPrevStart );
void SetCaretShape ( void );
void SetFmtRect ( void );
void Repaint ( void );
void TabTextOut ( CDC *pDC, int nCharIndex, int x, int y,
LPCTSTR lpStr, int nCount, BOOL bSelect );
friend class CTedit;
};
/******************************************************************************/
class CTedit : public CWnd
{
friend class CTfont;
private:
CAttrEdit m_cEdit;
CTfont* m_pcTfont;
eLASTACTION m_eLastAction;
BOOL m_bBackgroundTransparent;
BOOL m_bCleanupBKBrush;
BOOL m_bStarting;
BOOL m_bPasting;
BOOL m_bExpand;
BOOL m_bChanged;
UINT m_uiHitArea;
COLORREF m_crFGColor;
COLORREF m_crBKColor;
CRect m_cRectOldPos;
CRect m_cRectWindow;
CSize m_SizeMinimum;
public:
CImgWnd* m_pImgWnd;
CBrush m_hbrBkColor;
BOOL m_bRefresh;
int m_iLineHeight;
BOOL m_bVertEdit;
BOOL m_bAssocIMC;
HIMC m_hIMCEdit;
HIMC m_hIMCFace;
HIMC m_hIMCSize;
HWND m_hWndFace;
HWND m_hWndSize;
CTedit::CTedit();
DECLARE_DYNCREATE( CTedit )
afx_msg void OnEnMaxText();
protected:
//{{AFX_MSG(CTedit)
afx_msg void OnAttrEditEnChange(void);
afx_msg void OnSize( UINT nType, int cx, int cy );
afx_msg void OnMove( int x, int y );
afx_msg void OnGetMinMaxInfo( MINMAXINFO FAR* lpMMI );
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );
afx_msg void OnNcCalcSize( BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp );
afx_msg void OnNcPaint();
afx_msg UINT OnNcHitTest( CPoint point );
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnTextPlain();
afx_msg void OnTextBold();
afx_msg void OnTextItalic();
afx_msg void OnTextUnderline();
afx_msg void OnTextSelectfont();
afx_msg void OnTextSelectpointsize();
afx_msg void OnEditCut();
afx_msg void OnEditCopy();
afx_msg void OnEditPaste();
afx_msg void OnTextDelete();
afx_msg void OnTextSelectall();
afx_msg void OnTextUndo();
afx_msg void OnTextPlace();
afx_msg void OnTextTexttool();
afx_msg void OnUpdateTextPlain(CMenu *pcMenu);
afx_msg void OnUpdateTextBold(CMenu *pcMenu);
afx_msg void OnUpdateTextItalic(CMenu *pcMenu);
afx_msg void OnUpdateTextUnderline(CMenu *pcMenu);
afx_msg void OnUpdateTextTexttool(CMenu *pcMenu);
afx_msg void OnDestroy();
//}}AFX_MSG
afx_msg void OnEnUpdate();
afx_msg LRESULT OnMoving( WPARAM, LPARAM lprc );
DECLARE_MESSAGE_MAP()
virtual void PostNcDestroy();
CSize GetDefaultMinSize( void );
public:
virtual CTedit::~CTedit();
virtual BOOL PreCreateWindow( CREATESTRUCT& cs );
BOOL Create( CImgWnd* pParentWnd,
COLORREF crefForeground,
COLORREF crefBackground,
CRect& rectTextPos,
BOOL bBackTransparent = TRUE );
void OnAttrEditFontChange( void );
void RefreshWindow ( CRect* prect = NULL, BOOL bErase = TRUE );
void SetTextColor ( COLORREF crColor );
void SetBackColor ( COLORREF crColor );
void SetTransparentMode ( BOOL bTransparent );
void Undo ();
void ShowFontPalette ( int nCmdShow );
BOOL IsFontPaletteVisible( void );
void ShowFontToolbar ( BOOL bActivate = FALSE );
void HideFontToolbar ( void );
BOOL IsModified ( void ) { return m_bChanged; }
void GetBitmap ( CDC* pDC, CRect* prectImg );
CAttrEdit* GetEditWindow ( void ) { return &m_cEdit; }
HIMC DisableIme( HWND hWnd );
void EnableIme( HWND hWnd, HIMC hIMC );
BOOL IsCUAS();
};
#endif // __TEDIT_H__