📄 custctrl.h
字号:
inline void SetInsertionPoint ( long pos, long first_visible = -1 )
{
if ( m_data.SetInsertionPoint (pos,first_visible) )
Draw ();
}
virtual void DoDraw ( wxDC& dc, const wxRect& rect );
virtual void DoMove ( int x, int y );
virtual void DoSetSize ( int width, int height );
virtual void OnFocus ( bool focused );
virtual bool OnKeyEvent ( wxKeyEvent& event );
virtual bool OnMouseFocus ( bool entry );
virtual bool OnMouseEvent ( wxMouseEvent& event, wxCustomControlHandler* pdata );
virtual void SetFont ( wxFont& font, wxDC* pdc );
protected:
wxCustomTextCtrlHandler m_data;
};
// -----------------------------------------------------------------------
//#define wxCC_BT_DOWN wxCC_EXTRA_FLAG(0)
class WXDLLIMPEXP_CC wxCCustomButton : public wxCustomControl
{
DECLARE_DYNAMIC_CLASS(wxCCustomButton)
public:
wxCCustomButton () : wxCustomControl() { }
wxCCustomButton ( wxCustomControlManager* manager, wxWindowID id, const wxChar* label,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize );
virtual ~wxCCustomButton();
inline void SetLabel ( const wxChar* label ) { m_data.m_label = label; }
virtual void DoDraw ( wxDC& dc, const wxRect& rect );
virtual void DoMove ( int x, int y );
virtual void DoSetSize ( int width, int height );
virtual bool OnKeyEvent ( wxKeyEvent& event );
virtual bool OnMouseFocus ( bool entry );
virtual bool OnMouseEvent ( wxMouseEvent& event, wxCustomControlHandler* pdata );
//virtual void SetFont ( wxFont& font );
protected:
wxCCustomButtonHandler m_data;
};
// -----------------------------------------------------------------------
#define wxCH_CC_DOUBLE_CLICK_CYCLES 0x0010 // double-clicking cycles the selection
#define wxCH_CC_IMAGE_EXTENDS 0x0020 // image is drawn outside in non-popup portion
#define wxCH_CC_DROPDOWN_ANCHOR_RIGHT 0x0040 // anchor drop-down to right edge of parent window.
class WXDLLIMPEXP_CC wxCCustomComboBox : public wxCustomControl
{
DECLARE_DYNAMIC_CLASS(wxCCustomComboBox)
public:
wxCCustomComboBox () : wxCustomControl() { }
wxCCustomComboBox ( wxCustomControlManager* manager, wxWindowID id,
const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
int n = 0, const wxChar* choices[] = NULL, long style = 0,
const wxSize& imagesize = wxDefaultSize );
virtual ~wxCCustomComboBox();
inline int Append( const wxString& str )
{
return ((wxCCustomComboBoxDefaultHandler*)m_chData)->Append( str );
}
inline wxWindow* GetPopupInstance() const { return m_chData->GetPopupInstance(); }
inline int GetSelection () const { return ((wxCCustomComboBoxDefaultHandler*)m_chData)->GetSelection(); }
inline const wxString& GetValue () const
{
return m_chData->m_text;
}
void SetSelection ( int n );
inline void SetImagePaintFunction ( wxCustomPaintFunc paintfunc, void* userdata )
{
m_chData->m_paintfunc = paintfunc;
m_chData->m_paintfunc_customdata = userdata;
}
virtual void DoDraw ( wxDC& dc, const wxRect& rect );
virtual bool OnKeyEvent ( wxKeyEvent& event );
virtual bool OnMouseFocus ( bool entry );
virtual bool OnMouseEvent ( wxMouseEvent& event, wxCustomControlHandler* pdata );
virtual void DoMove ( int x, int y );
virtual void DoSetSize ( int width, int height );
inline void SetValue ( const wxString& text )
{
m_chData->SetValue(text);
Draw();
}
inline const wxString& SetValue () const
{
return m_chData->GetValue();
}
protected:
wxCCustomComboBoxHandler* m_chData;
};
class WXDLLIMPEXP_CC wxCCustomChoice : public wxCCustomComboBox
{
DECLARE_DYNAMIC_CLASS(wxCCustomChoice)
public:
wxCCustomChoice () : wxCCustomComboBox() { }
wxCCustomChoice ( wxCustomControlManager* manager, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
int n = 0, const wxChar* choices[] = NULL, long style = 0,
const wxSize& imagesize = wxDefaultSize );
virtual ~wxCCustomChoice();
};
// -----------------------------------------------------------------------
#endif // wxPG_USE_CUSTOM_CONTROLS
#if wxPG_USE_GENERIC_TEXTCTRL
#define wxGTextCtrlBase wxControl
class WXDLLIMPEXP_CC wxGenericTextCtrl : public wxGTextCtrlBase
{
public:
// creation
// --------
wxGenericTextCtrl() { Init(); }
wxGenericTextCtrl(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);
}
~wxGenericTextCtrl();
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);
// implement base class pure virtuals
// ----------------------------------
virtual wxString GetValue() const;
virtual void SetValue(const wxString& value);
virtual wxString GetRange(long from, long to) const;
virtual int GetLineLength(long lineNo) const;
virtual wxString GetLineText(long lineNo) const;
virtual int GetNumberOfLines() const;
virtual bool IsModified() const;
virtual bool IsEditable() const;
virtual void GetSelection(long* from, long* to) const;
// operations
// ----------
virtual void Remove(long from, long to);
// special
void DispatchEvent( int evtId );
bool SetInsertionPoint (long pos,
long first_visible = -1);
void DeleteSelection ();
bool SetSelection ( long from, long to );
inline wxTextPos GetLastPosition() const
{
return m_text.length();
}
// Standard wxWindow virtual overrides
virtual void SetFocus();
protected:
int HitTest ( wxCoord x, int* pCol );
void RecalculateMetrics();
// common part of all ctors
void Init();
wxString m_text;
wxCaret* m_pCaret;
unsigned int m_position;
unsigned int m_scrollPosition;
int m_selStart;
int m_selEnd;
int m_itemButDown; // dragging centers around this
int m_fontHeight;
bool m_isModified;
bool m_isEditable;
wxArrayInt m_arrExtents; // cached array of text extents
//int UpdateExtentCache ( wxString& tempstr, size_t index );
// event handlers
void OnKeyEvent ( wxKeyEvent& event );
void OnMouseEvent ( wxMouseEvent& event );
void OnPaint ( wxPaintEvent& event );
/* inline void ShowCaret ()
{
if ( m_pCaret && !(m_flags & wxCCM_FL_CARETVISIBLE) )
{
m_pCaret->Show ( TRUE );
m_flags |= wxCCM_FL_CARETVISIBLE;
//wxLogDebug ( wxT("ShowCaret( visible_after=%i )"), (int)m_pCaret->IsVisible() );
}
}*/
inline void ShowCaretBalanced ()
{
m_pCaret->Show ( TRUE );
}
inline void HideCaretBalanced ()
{
m_pCaret->Show ( FALSE );
}
//void MoveCaret ( int x, int y );
/* inline void HideCaret ()
{
if ( m_pCaret && ( m_flags & wxCCM_FL_CARETVISIBLE ) )
{
m_pCaret->Show ( FALSE );
m_flags &= ~(wxCCM_FL_CARETVISIBLE);
//wxLogDebug ( wxT("HideCaret( visible_after=%i )"), (int)m_pCaret->IsVisible() );
}
}*/
inline bool IsCaretVisible () const
{
//if ( m_pCaret )
return m_pCaret->IsVisible();
//return FALSE;
}
/*
// editing
virtual void Clear();
virtual void Replace(long from, long to, const wxString& value);
virtual void Remove(long from, long to);
// load the controls contents from the file
virtual bool LoadFile(const wxString& file);
// clears the dirty flag
virtual void MarkDirty();
virtual void DiscardEdits();
virtual void SetMaxLength(unsigned long len);
// 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);
#ifdef __WIN32__
virtual bool EmulateKeyPress(const wxKeyEvent& event);
#endif // __WIN32__
#if wxUSE_RICHEDIT
// apply text attribute to the range of text (only works with richedit
// controls)
virtual bool SetStyle(long start, long end, const wxTextAttr& style);
virtual bool SetDefaultStyle(const wxTextAttr& style);
virtual bool GetStyle(long position, wxTextAttr& style);
#endif // wxUSE_RICHEDIT
// 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 column and line.
virtual long XYToPosition(long x, long y) const;
virtual bool PositionToXY(long pos, long *x, long *y) const;
virtual void ShowPosition(long pos);
virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const;
virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt,
wxTextCoord *col,
wxTextCoord *row) const
{
return wxTextCtrlBase::HitTest(pt, col, row);
}
// Clipboard operations
virtual void Copy();
virtual void Cut();
virtual void Paste();
virtual bool CanCopy() const;
virtual bool CanCut() const;
virtual bool CanPaste() const;
// Undo/redo
virtual void Undo();
virtual void Redo();
virtual bool CanUndo() const;
virtual bool CanRedo() const;
// Insertion point
virtual void SetInsertionPoint(long pos);
virtual void SetInsertionPointEnd();
virtual long GetInsertionPoint() const;
virtual wxTextPos GetLastPosition() const;
virtual void SetSelection(long from, long to);
virtual void SetEditable(bool editable);
// Caret handling (Windows only)
bool ShowNativeCaret(bool show = true);
bool HideNativeCaret() { return ShowNativeCaret(false); }
// Implementation from now on
// --------------------------
virtual void SetWindowStyleFlag(long style);
virtual void Command(wxCommandEvent& event);
virtual bool MSWCommand(WXUINT param, WXWORD id);
virtual WXHBRUSH MSWControlColor(WXHDC hDC);
#if wxUSE_RICHEDIT
virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
int GetRichVersion() const { return m_verRichEdit; }
bool IsRich() const { return m_verRichEdit != 0; }
// rich edit controls are not compatible with normal ones and wem ust set
// the colours for them otherwise
virtual bool SetBackgroundColour(const wxColour& colour);
virtual bool SetForegroundColour(const wxColour& colour);
#endif // wxUSE_RICHEDIT
virtual void AdoptAttributesFromHWND();
virtual bool AcceptsFocus() const;
// callbacks
void OnDropFiles(wxDropFilesEvent& event);
void OnChar(wxKeyEvent& event); // Process 'enter' if required
void OnCut(wxCommandEvent& event);
void OnCopy(wxCommandEvent& event);
void OnPaste(wxCommandEvent& event);
void OnUndo(wxCommandEvent& event);
void OnRedo(wxCommandEvent& event);
void OnDelete(wxCommandEvent& event);
void OnSelectAll(wxCommandEvent& event);
void OnUpdateCut(wxUpdateUIEvent& event);
void OnUpdateCopy(wxUpdateUIEvent& event);
void OnUpdatePaste(wxUpdateUIEvent& event);
void OnUpdateUndo(wxUpdateUIEvent& event);
void OnUpdateRedo(wxUpdateUIEvent& event);
void OnUpdateDelete(wxUpdateUIEvent& event);
void OnUpdateSelectAll(wxUpdateUIEvent& event);
// Show a context menu for Rich Edit controls (the standard
// EDIT control has one already)
void OnContextMenu(wxContextMenuEvent& event);
// be sure the caret remains invisible if the user
// called HideNativeCaret() before
void OnSetFocus(wxFocusEvent& event);
protected:
// intercept WM_GETDLGCODE
virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
// call this to increase the size limit (will do nothing if the current
// limit is big enough)
//
// returns true if we increased the limit to allow entering more text,
// false if we hit the limit set by SetMaxLength() and so didn't change it
bool AdjustSpaceLimit();
#if wxUSE_RICHEDIT && (!wxUSE_UNICODE || wxUSE_UNICODE_MSLU)
// replace the selection or the entire control contents with the given text
// in the specified encoding
bool StreamIn(const wxString& value, wxFontEncoding encoding, bool selOnly);
// get the contents of the control out as text in the given encoding
wxString StreamOut(wxFontEncoding encoding, bool selOnly = false) const;
#endif // wxUSE_RICHEDIT
// replace the contents of the selection or of the entire control with the
// given text
void DoWriteText(const wxString& text, bool selectionOnly = true);
// set the selection possibly without scrolling the caret into view
void DoSetSelection(long from, long to, bool scrollCaret = true);
// return true if there is a non empty selection in the control
bool HasSelection() const;
// get the length of the line containing the character at the given
// position
long GetLengthOfLineContainingPos(long pos) const;
// send TEXT_UPDATED event, return true if it was handled, false otherwise
bool SendUpdateEvent();
// override some base class virtuals
virtual bool MSWShouldPreProcessMessage(WXMSG* pMsg);
virtual wxSize DoGetBestSize() const;
virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
#if wxUSE_RICHEDIT
// we're using RICHEDIT (and not simple EDIT) control if this field is not
// 0, it also gives the version of the RICHEDIT control being used (1, 2 or
// 3 so far)
int m_verRichEdit;
#endif // wxUSE_RICHEDIT
// number of EN_UPDATE events sent by Windows when we change the controls
// text ourselves: we want this to be exactly 1
int m_updatesCount;
virtual wxVisualAttributes GetDefaultAttributes() const;
wxMenu* m_privateContextMenu;
bool m_isNativeCaretShown;
*/
private:
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS_NO_COPY(wxGenericTextCtrl)
};
#endif
//
// Undefine macros that are not needed outside library source files
//
#ifndef __wxCCM_SOURCE_FILE__
# undef WXDLLIMPEXP_CC
#endif
#endif // __WX_CUSTCTRL_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -