【Aegisub相關(guān)/可視化界面(GUI)】wxWidgets庫 - wxTextCtrl學(xué)習(xí)筆記
來源鏈接:
https://blog.csdn.net/blems/article/details/5255861
wxTextCtrl學(xué)習(xí)筆記
?
1、繼承關(guān)系
可多重繼承自streambuf
默認(rèn)集成自wxControl->wxWindow->wxEvtHandler->wxObject
2、頭文件(在wxWidget中每個控件都是單獨的一個類)
wx/textctrl.h
?
3、窗口類型
wxTE_PROCESS_ENTER 生成 wxEVT_COMMAND_TEXT_ENTER事件
wxTE_PROCESS_TAB
wxTE_MULTILINE 允許多行
wxTE_PASSWORD 文本顯示為星號
wxTE_READONLY 文本不可編輯
wxTE_RICH
wxTE_RICH2
wxTE_AUTO_URL
wxTE_NOHIDESEL
wxTE_LEFT 左對齊 (default).
wxTE_CENTRE 居中對齊(currently wxMSW and wxGTK2 only).
wxTE_RIGHT 右對齊 (currently wxMSW and wxGTK2 only).
wxTE_DONTWRAP 同 wxHSCROLL style: 不換行,僅僅顯示水平滾動條.
wxTE_CHARWRAP ? ?無法一行顯示完整的長行會在任意位置換行 (wxUniv and wxGTK2 only).
wxTE_WORDWRAP 無法一行顯示完整的長行會在單詞的邊界換行 (wxUniv and wxGTK2 only).
wxTE_BESTWRAP 在單詞的邊界 or 或者比窗口寬度更長的單詞任意字母處換行 (this is the default).
wxTE_CAPITALIZE ? 在ppc和sMartphone上,第一個字母大寫
?
?
需要注意的是在wxMSW和wxGTK平臺上,對齊方式(wxTE_LEFT, wxTE_CENTRE and wxTE_RIGHT)可在文本控件創(chuàng)建后動態(tài)的
改變。wxTE_READONLY, wxTE_PASSWORD 和 換行樣式的動態(tài)改變僅適用于wxGTK平臺,而非wxMSW。其他的樣式
只能在空間創(chuàng)建過程中設(shè)置。
?
4、wxTextCtrl 文本格式
總結(jié):千萬不要用wxTextCtrl(多行)返回的indices來操作控件中所包含的字符串,這些indices只能用作參數(shù)傳遞給wxTextCtrl的其他成員函數(shù)。
?
5、wxTextCtrl 樣式
多行文本控件支持插入文本之前調(diào)用SetDefaultStyle函數(shù)來設(shè)置文本樣式,也可以調(diào)用SetStyle函數(shù)來改變已經(jīng)插入的文本的樣式。
text->SetDefaultStyle(wxTextAttr(*wxRED,*wxLIGHT_GREY)); //設(shè)置前景色為紅色,背景色為灰色,wxTextAttr只有一個參數(shù)時,默認(rèn)設(shè)置前景色
?
6、wxTextCtrl和c++流
wxTextCtrl可以以三種方式支持流的特性:
第一種:
wxTextCtrl *contrl= new wxTextCtrl(...);
?
ostream stream(control);
stream<<123.456<<"some text";
stream.flush();
?
?
第二種:
?
#include <iostream>
?
wxTextCtrl *control = new wxTextCtrl(...);
?
std::streambuf *sbOld = std::cout.rdbuf();
std::cout.rdbuf(control);
?
std::cout.rdbuf(sbOld);
?
第三種:
#include <iostream>
?
wxTextCtrl *control = new wxTextCtrl(...);
wxStreamToTextRedirector redirect(control);
?
?
6、常量
下面的枚舉值是HitTest函數(shù)的返回值,用來判斷鼠標(biāo)的點擊點在文本框中位置(像素)
enum wxTextCtrlHitTestResult
{
? ? wxTE_HT_UNKNOWN = -2, ? // this means HitTest() is simply not implemented
? ? wxTE_HT_BEFORE, ? ? ? ? // 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]
};
7、事件處理
EVT_TEXT(id, func)
EVT_TEXT_ENTER(id, func)
EVT_TEXT_URL(id, func) ?
EVT_TEXT_MAXLEN(id, func)
官方文檔只提到上述4個時間映射宏,應(yīng)該還是有很多的,不是很理解這個地方哈~
?
8、成員函數(shù)(常用)
1、void AppendText(const wxString& text) //追加文本到末尾,文本追加后插入點仍在文本框的末尾,可以使用GetInsertionPoint和SetInsertionPoint來設(shè)置插入點
?
2、virtual void Clear() //清空控件中的文本,該函數(shù)將生成wxEVT_COMMAND_TEXT_UPDATE事件
?
3、wxString GetValue() const//獲取控件中的字符串(帶有換行標(biāo)記)
?
4、bool IsEditable() const //可編輯返回true
?
5、bool IsEmpty() const //控件中無文本返回true
?
6、bool IsModified() const //控件中文本修改返回true
?
7、bool SetDefaultStyle(const wxTextAttr& style) //設(shè)置文本樣式(在AppenText之前使用)
?
8、virtual void SetEditable(const bool editable) //使控件變?yōu)榭删庉?/p>
?
9、void SetValue(const wxString& value) //替換控件中的字符串