【Aegisub相关/可视化界面(GUI)】wxWidgets库 - wxTextCtrl学习笔记
来源链接:https://blog.csdn.net/blems/article/details/5255861wxTextCtrl学习笔记
1、继承关系
可多重继承自streambuf
默认集成自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)可在文本控件创建后动态的
改变。wxTE_READONLY, wxTE_PASSWORD 和 换行样式的动态改变仅适用于wxGTK平台,而非wxMSW。其他的样式
只能在空间创建过程中设置。
4、wxTextCtrl 文本格式
总结:千万不要用wxTextCtrl(多行)返回的indices来操作控件中所包含的字符串,这些indices只能用作参数传递给wxTextCtrl的其他成员函数。
5、wxTextCtrl 样式
多行文本控件支持插入文本之前调用SetDefaultStyle函数来设置文本样式,也可以调用SetStyle函数来改变已经插入的文本的样式。
text->SetDefaultStyle(wxTextAttr(*wxRED,*wxLIGHT_GREY)); //设置前景色为红色,背景色为灰色,wxTextAttr只有一个参数时,默认设置前景色
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函数的返回值,用来判断鼠标的点击点在文本框中位置(像素)
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
wxTE_HT_BEYOND // after
};
7、事件处理
EVT_TEXT(id, func)
EVT_TEXT_ENTER(id, func)
EVT_TEXT_URL(id, func)
EVT_TEXT_MAXLEN(id, func)
官方文档只提到上述4个时间映射宏,应该还是有很多的,不是很理解这个地方哈~
8、成员函数(常用)
1、void AppendText(const wxString& text) //追加文本到末尾,文本追加后插入点仍在文本框的末尾,可以使用GetInsertionPoint和SetInsertionPoint来设置插入点
2、virtual void Clear() //清空控件中的文本,该函数将生成wxEVT_COMMAND_TEXT_UPDATE事件
3、wxString GetValue() const//获取控件中的字符串(带有换行标记)
4、bool IsEditable() const //可编辑返回true
5、bool IsEmpty() const //控件中无文本返回true
6、bool IsModified() const //控件中文本修改返回true
7、bool SetDefaultStyle(const wxTextAttr& style) //设置文本样式(在AppenText之前使用)
8、virtual void SetEditable(const bool editable) //使控件变为可编辑
9、void SetValue(const wxString& value) //替换控件中的字符串
直接影响Aegisub的ass字幕模板行无法换行的地方就在这里:
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)可在文本控件创建后动态的
改变。wxTE_READONLY, wxTE_PASSWORD 和 换行样式的动态改变仅适用于wxGTK平台,而非wxMSW。其他的样式
只能在空间创建过程中设置。 再精确一点地讲就是这里:
wxTE_MULTILINE 允许多行
wxTE_DONTWRAP 同 wxHSCROLL style: 不换行,仅仅显示水平滚动条.
wxTE_CHARWRAP 无法一行显示完整的长行会在任意位置换行 (wxUniv and wxGTK2 only).
wxTE_WORDWRAP 无法一行显示完整的长行会在单词的边界换行 (wxUniv and wxGTK2 only).
wxTE_BESTWRAP 在单词的边界 or 或者比窗口宽度更长的单词任意字母处换行 (this is the default).
页:
[1]