找回密码
 立即注册
查看: 1200|回复: 2

【Aegisub相关/可视化界面(GUI)】wxWidgets库 - wxTextCtrl学习笔记

  • TA的每日心情
    开心
    2022-1-29 18:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    184

    主题

    413

    回帖

    585

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    549442

    崭露头角活跃达人新人登场

    Seekladoom 发表于 2021-1-9 15:26:31 | 显示全部楼层 |阅读模式
    来源链接:

    wxTextCtrl学习笔记



    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 [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个时间映射宏,应该还是有很多的,不是很理解这个地方哈~



    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) //替换控件中的字符串

    一个对动画组来说真正耐用的中文字体应该具备哪些条件?
    https://bbs.acgrip.com/forum.php?mod=viewthread&tid=5310

    使用思源字体在Aegisub中制作字幕时的一些常见问题
    https://bbs.acgrip.com/forum.php?mod=viewthread&tid=3805
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-1-29 18:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    184

    主题

    413

    回帖

    585

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    549442

    崭露头角活跃达人新人登场

    Seekladoom  楼主| 发表于 2021-1-9 15:27:43 | 显示全部楼层
    直接影响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。其他的样式

    只能在空间创建过程中设置。
    一个对动画组来说真正耐用的中文字体应该具备哪些条件?
    https://bbs.acgrip.com/forum.php?mod=viewthread&tid=5310

    使用思源字体在Aegisub中制作字幕时的一些常见问题
    https://bbs.acgrip.com/forum.php?mod=viewthread&tid=3805
    回复 支持 0 反对 1

    使用道具 举报

  • TA的每日心情
    开心
    2022-1-29 18:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    184

    主题

    413

    回帖

    585

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    549442

    崭露头角活跃达人新人登场

    Seekladoom  楼主| 发表于 2021-1-9 15:27:59 | 显示全部楼层
    再精确一点地讲就是这里:

    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).​
    一个对动画组来说真正耐用的中文字体应该具备哪些条件?
    https://bbs.acgrip.com/forum.php?mod=viewthread&tid=5310

    使用思源字体在Aegisub中制作字幕时的一些常见问题
    https://bbs.acgrip.com/forum.php?mod=viewthread&tid=3805
    回复 支持 0 反对 1

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表