如何在不破坏非活动选择颜色的情况下更改wxTextCtrl的背景颜色?

时间:2012-07-04 13:29:32

标签: c++ colors wxwidgets background-color

我想通过在错误时将文本字段的背景设置为红色并在成功输入时将白色设置为白色来表示wxGTK应用程序中的输入错误。但是,当通过SetBackgroundColor设置背景颜色时,非活动选区的背景颜色将设置为相同的颜色。将背景颜色设置为白色时,这会导致非常不良的情况:由于所选文本的前景色为白色,所选文本的背景颜色现在也为白色,因此文本无法读取。

如何重置wxTextCtrl上的颜色,以便非活动的所选文本具有灰色背景(SetBackgroundColour之前的默认设置)? SetBackgroundStyle( wxBG_STYLE_SYSTEM)是我的第一个猜测,但对wxGTK没有影响。

代码示例:

#include <wx/textctrl.h>
#include <wx/frame.h>
#include <wx/defs.h>
#include <wx/app.h>

class App : public wxApp {
    bool OnInit() {
        wxFrame* frame = new wxFrame(NULL, wxID_ANY, wxT("Frame"));
        wxTextCtrl* text = new wxTextCtrl( frame, wxID_ANY, wxT("foo bar") );
        text->SetBackgroundStyle( wxBG_STYLE_COLOUR );
        text->SetBackgroundColour( *wxWHITE );
        frame->Show();
        return true;
    }
};

IMPLEMENT_APP( App );

2 个答案:

答案 0 :(得分:2)

您可以尝试使用SetDefaultStyle,我自己没有尝试过,但这里有一些wxwidgets文档的摘录:

text->SetDefaultStyle(wxTextAttr(*wxRED));
text->AppendText("Red text\n");
text->SetDefaultStyle(wxTextAttr(wxNullColour, *wxLIGHT_GREY));
text->AppendText("Red on grey text\n");
text->SetDefaultStyle(wxTextAttr(*wxBLUE);
text->AppendText("Blue on grey text\n");

这很可能会让您独立更改文本的颜色和/或更改文本本身的颜色。这是wxTextCtrl文档的链接,我找到了这段代码: http://docs.wxwidgets.org/2.8/wx_wxtextctrl.html

此致 Roin

答案 1 :(得分:0)

试过这个并且它有效:

  TextCtrl1->SetBackgroundColour(wxColour(0xFF,0xA0,0xA0));
  TextCtrl1->SetStyle(0, -1, TextCtrl1->GetDefaultStyle());