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