【问题标题】:wxWidgets Transparent wxTextCtrlwxWidgets 透明 wxTextCtrl
【发布时间】:2016-12-06 21:23:13
【问题描述】:

我正在尝试创建一个自定义透明wxTextCtrl,方法是从它驱动并自己绘制文本,如下所示:

BEGIN_EVENT_TABLE(TextLayer, wxTextCtrl)
    EVT_PAINT(TextLayer::OnPaint)
    EVT_ERASE_BACKGROUND(TextLayer::OnEraseBackground)
END_EVENT_TABLE()

void TextLayer::OnEraseBackground(wxEraseEvent& event) {}
void TextLayer::OnPaint(wxPaintEvent & evt)
{
    wxAutoBufferedPaintDC  dc(this);
    PrepareDC(dc);

    wxGraphicsContext *gc = wxGraphicsContext::Create( dc );

    if(gc)
    {
        dc.SetFont(GetFont());
        dc.SetTextForeground(GetForegroundColour());
        auto a = GetValue();
        dc.DrawText(GetValue(), 0, 0);
        delete gc;
    }
}

但它不起作用,它不透明,我应该如何正确地做到这一点?

【问题讨论】:

  • 您最好创建某种透明面板,给它一个焦点,然后捕获 EVT_KEY_DOWN/EVT_PAINT 事件。原因是 - 我不认为你可以覆盖本机控制绘画。
  • 在 TextLayer 类中调用 evt.Skip(),因为您似乎正在 OnPaint 函数处停止事件。

标签: c++ c++11 wxwidgets transparent wxtextctrl


【解决方案1】:

抱歉,您将无法使本机控件透明。您可以使用 wxGTK 自定义透明控件(请参阅“擦除”示例),但不能使用原生控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    相关资源
    最近更新 更多