📄 textctrl.h
字号:
/////////////////////////////////////////////////////////////////////////////
// Name: wx/univ/textctrl.h
// Purpose: wxTextCtrl class
// Author: Vadim Zeitlin
// Modified by:
// Created: 15.09.00
// RCS-ID: $Id: textctrl.h,v 1.1 2005/03/16 06:50:14 kehc Exp $
// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_UNIV_TEXTCTRL_H_
#define _WX_UNIV_TEXTCTRL_H_
#ifdef __GNUG__
#pragma interface "univtextctrl.h"
#endif
class WXDLLEXPORT wxCaret;
class WXDLLEXPORT wxTextCtrlCommandProcessor;
#include "wx/scrolwin.h" // for wxScrollHelper
#include "wx/univ/inphand.h"
// ----------------------------------------------------------------------------
// wxTextCtrl actions
// ----------------------------------------------------------------------------
// cursor movement and also selection and delete operations
#define wxACTION_TEXT_GOTO _T("goto") // to pos in numArg
#define wxACTION_TEXT_FIRST _T("first") // go to pos 0
#define wxACTION_TEXT_LAST _T("last") // go to last pos
#define wxACTION_TEXT_HOME _T("home")
#define wxACTION_TEXT_END _T("end")
#define wxACTION_TEXT_LEFT _T("left")
#define wxACTION_TEXT_RIGHT _T("right")
#define wxACTION_TEXT_UP _T("up")
#define wxACTION_TEXT_DOWN _T("down")
#define wxACTION_TEXT_WORD_LEFT _T("wordleft")
#define wxACTION_TEXT_WORD_RIGHT _T("wordright")
#define wxACTION_TEXT_PAGE_UP _T("pageup")
#define wxACTION_TEXT_PAGE_DOWN _T("pagedown")
// clipboard operations
#define wxACTION_TEXT_COPY _T("copy")
#define wxACTION_TEXT_CUT _T("cut")
#define wxACTION_TEXT_PASTE _T("paste")
// insert text at the cursor position: the text is in strArg of PerformAction
#define wxACTION_TEXT_INSERT _T("insert")
// if the action starts with either of these prefixes and the rest of the
// string is one of the movement commands, it means to select/delete text from
// the current cursor position to the new one
#define wxACTION_TEXT_PREFIX_SEL _T("sel")
#define wxACTION_TEXT_PREFIX_DEL _T("del")
// mouse selection
#define wxACTION_TEXT_ANCHOR_SEL _T("anchorsel")
#define wxACTION_TEXT_EXTEND_SEL _T("extendsel")
#define wxACTION_TEXT_SEL_WORD _T("wordsel")
#define wxACTION_TEXT_SEL_LINE _T("linesel")
// undo or redo
#define wxACTION_TEXT_UNDO _T("undo")
#define wxACTION_TEXT_REDO _T("redo")
// ----------------------------------------------------------------------------
// wxTextCtrl types
// ----------------------------------------------------------------------------
// wxTextPos is the position in the text
typedef long wxTextPos;
// wxTextCoord is the line or row number (which should have been unsigned but
// is long for backwards compatibility)
typedef long wxTextCoord;
// ----------------------------------------------------------------------------
// wxTextCtrl::HitTest return values
// ----------------------------------------------------------------------------
// the point asked is ...
enum wxTextCtrlHitTestResult
{
wxTE_HT_BEFORE = -1, // either to the left or upper
wxTE_HT_ON_TEXT, // directly on
wxTE_HT_BELOW, // below [the last line]
wxTE_HT_BEYOND // after [the end of line]
};
// ... the character returned
// ----------------------------------------------------------------------------
// wxTextCtrl
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxTextCtrl : public wxTextCtrlBase, public wxScrollHelper
{
public:
// creation
// --------
wxTextCtrl() { Init(); }
wxTextCtrl(wxWindow *parent,
wxWindowID id,
const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxTextCtrlNameStr)
{
Init();
Create(parent, id, value, pos, size, style, validator, name);
}
bool Create(wxWindow *parent,
wxWindowID id,
const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxTextCtrlNameStr);
virtual ~wxTextCtrl();
// implement base class pure virtuals
// ----------------------------------
virtual wxString GetValue() const;
virtual void SetValue(const wxString& value);
virtual int GetLineLength(wxTextCoord lineNo) const;
virtual wxString GetLineText(wxTextCoord lineNo) const;
virtual int GetNumberOfLines() const;
virtual bool IsModified() const;
virtual bool IsEditable() const;
// If the return values from and to are the same, there is no selection.
virtual void GetSelection(wxTextPos* from, wxTextPos* to) const;
// operations
// ----------
// editing
virtual void Clear();
virtual void Replace(wxTextPos from, wxTextPos to, const wxString& value);
virtual void Remove(wxTextPos from, wxTextPos to);
// clears the dirty flag
virtual void DiscardEdits();
// writing text inserts it at the current position, appending always
// inserts it at the end
virtual void WriteText(const wxString& text);
virtual void AppendText(const wxString& text);
// translate between the position (which is just an index in the text ctrl
// considering all its contents as a single strings) and (x, y) coordinates
// which represent (logical, i.e. unwrapped) column and line.
virtual wxTextPos XYToPosition(wxTextCoord x, wxTextCoord y) const;
virtual bool PositionToXY(wxTextPos pos,
wxTextCoord *x, wxTextCoord *y) const;
// wxUniv-specific: find a screen position (in client coordinates) of the
// given text position or of the caret
bool PositionToLogicalXY(wxTextPos pos, wxCoord *x, wxCoord *y) const;
bool PositionToDeviceXY(wxTextPos pos, wxCoord *x, wxCoord *y) const;
wxPoint GetCaretPosition() const;
virtual void ShowPosition(wxTextPos pos);
// Clipboard operations
virtual void Copy();
virtual void Cut();
virtual void Paste();
// Undo/redo
virtual void Undo();
virtual void Redo();
virtual bool CanUndo() const;
virtual bool CanRedo() const;
// Insertion point
virtual void SetInsertionPoint(wxTextPos pos);
virtual void SetInsertionPointEnd();
virtual wxTextPos GetInsertionPoint() const;
virtual wxTextPos GetLastPosition() const;
virtual void SetSelection(wxTextPos from, wxTextPos to);
virtual void SetEditable(bool editable);
// wxUniv-specific methods
// -----------------------
// caret stuff
virtual void ShowCaret(bool show = TRUE);
void HideCaret() { ShowCaret(FALSE); }
void CreateCaret(); // for the current font size
// helpers for cursor movement
wxTextPos GetWordStart() const;
wxTextPos GetWordEnd() const;
// selection helpers
bool HasSelection() const
{ return m_selStart != -1 && m_selEnd > m_selStart; }
void ClearSelection();
void RemoveSelection();
wxString GetSelectionText() const;
// find the character at this position, return 0 if the character is
// really there, -1 if the point is before the beginning of the text/line
// and the returned character is the first one to follow it or +1 if it the
// position is beyond the end of line/text and the returned character is
// the last one
//
// NB: pt is in device coords (not adjusted for the client area origin nor
// for the scrolling)
wxTextCtrlHitTestResult HitTest(const wxPoint& pt,
wxTextCoord *col, wxTextCoord *row) const;
// find the character at this position in the given line, return value as
// for HitTest()
//
// NB: x is the logical coord (client and unscrolled)
wxTextCtrlHitTestResult HitTestLine(const wxString& line,
wxCoord x,
wxTextCoord *colOut) const;
// bring the given position into view
void ShowHorzPosition(wxCoord pos);
// scroll the window horizontally so that the first character shown is in
// position pos
void ScrollText(wxTextCoord col);
// adjust the DC for horz text control scrolling too
virtual void DoPrepareDC(wxDC& dc);
// implementation only from now on
// -------------------------------
// override this to take into account our scrollbar-less scrolling
virtual void CalcUnscrolledPosition(int x, int y, int *xx, int *yy) const;
virtual void CalcScrolledPosition(int x, int y, int *xx, int *yy) const;
// set the right colours and border
virtual bool IsContainerWindow() const { return TRUE; }
virtual wxBorder GetDefaultBorder() const { return wxBORDER_SUNKEN; }
// perform an action
virtual bool PerformAction(const wxControlAction& action,
long numArg = -1,
const wxString& strArg = wxEmptyString);
// override these methods to handle the caret
virtual bool SetFont(const wxFont &font);
virtual bool Enable(bool enable = TRUE);
// more readable flag testing methods
bool IsPassword() const { return (GetWindowStyle() & wxTE_PASSWORD) != 0; }
bool WrapLines() const
{ return !IsSingleLine() && !(GetWindowStyle() & wxHSCROLL); }
// only for wxStdTextCtrlInputHandler
void RefreshSelection();
protected:
// override base class methods
virtual void DoDrawBorder(wxDC& dc, const wxRect& rect);
virtual void DoDraw(wxControlRenderer *renderer);
// calc the size from the text extent
virtual wxSize DoGetBestClientSize() const;
// common part of all ctors
void Init();
// drawing
// -------
// draw the text in the given rectangle
void DoDrawTextInRect(wxDC& dc, const wxRect& rectUpdate);
// draw the line wrap marks in this rect
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -