wxDataViewListCtrl更改单元格背景颜色



作为标题,是否可以更改wxDataViewListCtrl中单个单元格的背景色?如果没有,是否可以更改整行的背景颜色?我该怎么做?其他解决方案?提前感谢的一些建议

对于那些可能感兴趣的人,我已经解决了如下

  1. 扩展wxDataViewCustomRenderer
class MyColorRenderer: public wxDataViewCustomRenderer
{
public:
explicit MyColorRenderer(wxDataViewCellMode mode) : wxDataViewCustomRenderer("string", mode, wxALIGN_CENTER)
{ 
}
virtual bool Render( wxRect rect, wxDC *dc, int state ) override;
virtual bool ActivateCell(const wxRect& WXUNUSED(cell), wxDataViewModel*WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col), const wxMouseEvent *mouseEvent) override
{
return false;
}
virtual wxSize GetSize() const override
{
return wxSize(60,20);
}
virtual bool SetValue( const wxVariant &value ) override
{
m_value = value.GetString();
return true;
}
virtual bool GetValue( wxVariant &WXUNUSED(value) ) const override { return true; }
virtual bool HasEditorCtrl() const override { return true; }
virtual wxWindow*
CreateEditorCtrl(wxWindow* parent, wxRect labelRect,  const wxVariant& value) override
{
wxTextCtrl* text = new wxTextCtrl(parent, wxID_ANY, value, labelRect.GetPosition(), labelRect.GetSize(), wxTE_PROCESS_ENTER);
text->SetInsertionPointEnd();
return text;
}
virtual bool
GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value) override
{
wxTextCtrl* text = wxDynamicCast(ctrl, wxTextCtrl);
if ( !text )
return false;
value = text->GetValue();
return true;
}
private:
wxString m_value;
};
li>覆盖渲染方法
bool MyColorRenderer::Render( wxRect rect, wxDC *dc, int state )
{
dc->SetBrush( wxColour(m_value) );
rect.Deflate(2);
dc->DrawRoundedRectangle( rect, 5 );
return true;
}
  1. 根据需要创建单元格

lst->AppendColumn(new wxDataViewColumn("Colore",newMyColorRenderer(wxDATAVIEW_CELL_INERT(,5,60,wxALIGN_CENTER((;

您可以覆盖自定义模型中的wxDataViewListModel::GetAttrByRow(),以返回任何单元格所需的颜色(和字体等(属性。

最新更新