# wxDataViewReadOnlyTextRenderer for wxDataViewListCtrl by R-CO
## wxDataViewReadOnlyTextRenderer.h
```cpp=
#include <wx/dataview.h>
class wxDataViewReadOnlyTextRenderer : public wxDataViewTextRenderer
{
public:
wxDataViewReadOnlyTextRenderer(const wxString& varianttype = GetDefaultType(),
wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
int align = wxDVR_DEFAULT_ALIGNMENT);
virtual ~wxDataViewReadOnlyTextRenderer() = default;
virtual wxWindow* CreateEditorCtrl(wxWindow* parent, wxRect labelRect,
const wxVariant& value) override;
};
```
## wxDataViewReadOnlyTextRenderer.cpp
```cpp=
#include "wxDataViewReadOnlyTextRenderer.h"
wxDataViewReadOnlyTextRenderer::wxDataViewReadOnlyTextRenderer(const wxString& varianttype, wxDataViewCellMode mode, int align)
: wxDataViewTextRenderer(varianttype, mode, align)
{
}
wxWindow* wxDataViewReadOnlyTextRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelRect, const wxVariant& value)
{
return new wxTextCtrl(parent, wxID_ANY, value.GetString(), wxPoint(labelRect.x, labelRect.y), wxSize(labelRect.width, labelRect.height), wxTE_READONLY);
}
```
## Example
```cpp=
unsigned int modelColumnIndex = 0;
m_dataViewListCtrl->AppendColumn(new wxDataViewColumn(_("Column_0"), new wxDataViewReadOnlyTextRenderer(), modelColumnIndex++));
m_dataViewListCtrl->AppendColumn(new wxDataViewColumn(_("Column_1"), new wxDataViewReadOnlyTextRenderer(), modelColumnIndex++));
m_dataViewListCtrl->AppendColumn(new wxDataViewColumn(_("Column_2"), new wxDataViewReadOnlyTextRenderer(wxDataViewReadOnlyTextRenderer::GetDefaultType(), wxDATAVIEW_CELL_EDITABLE, wxALIGN_LEFT), modelColumnIndex++));
```
---
## Remarks
此方法不是正確的wxWidgets實作
但是"碰巧"在Windows平台上可達到效果
正確的做法應該是繼承wxDataViewCustomRenderer
需要覆寫的function較多
待他日研究
###### tags: `wxWidgets`