# 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`