【发布时间】: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