Custom Control

Post here wxCrafter related issues / features / bugs
coder99
CodeLite Expert
Posts: 167
Joined: Wed Oct 22, 2008 6:50 am
Contact:

Custom Control

Post by coder99 »

I would like to add the MyRichTextCtrl class - as given in the richtext example in the wxWidgets samples to a project, whose GUI code is built using wxCrafter.
It seems I would have to use a custom control, but since I am not at all familiar with how such a control is intended to be used, I am am struggling what would be the simplest way to add it.

I have played just a bit with this feature - wxCrafter 2.6 - and it looks like I have to be pretty sure what code I need to add to this custom class when I start, as there seems to be no easy way to edit/modify this code once it is started other than to perhaps create the code in an editor and then delete and recreate the custom control code over and over till it comes out right.

Am I missing some tutorial or other document. It seems I ran into this once before and it looks like I gave up on it and added the code manually to my derived main frame directly.

An additional wrinkle is that in this project I am also trying to get to know & use the AUI manager etc
TIA for any thoughts or pointers

Win 10/11 64-bit, MSVC 2019/2022, wxWidgets 3.2.1, CodeLite 17.0 Mint 21.2

User avatar
eranif
CodeLite Plugin
Posts: 6375
Joined: Wed Feb 06, 2008 9:29 pm
Genuine User: Yes
IDE Question: C++
Contact:

Re: Custom Control

Post by eranif »

The easiest way to use custom control in wxCrafter is by making a ctor with the exact same signature as the parent class.

If you use the default wxRichTextCtrl in wxCrafter, the generated code would be something like this:

Code: Select all

m_richTextCtrl91 = new wxRichTextCtrl(this, wxID_ANY, wxT("wxRichTextCtrl!"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxTE_MULTILINE|wxTE_PROCESS_TAB|wxTE_PROCESS_ENTER|wxWANTS_CHARS);
Which corresponds to this signature of wxRichTextCtrl:

Code: Select all

wxRichTextCtrl::wxRichTextCtrl	(	wxWindow * 	parent,
wxWindowID 	id = -1,
const wxString & 	value = wxEmptyString,
const wxPoint & 	pos = wxDefaultPosition,
const wxSize & 	size = wxDefaultSize,
long 	style = wxRE_MULTILINE,
const wxValidator & 	validator = wxDefaultValidator,
const wxString & 	name = wxTextCtrlNameStr 
)	
(notice that wxCrafter does not even pass the validator & name arguments)

To conclude:

1. Create new class MyRichTextCtrl class with this signature:

Code: Select all

MyRichTextCtrl::MyRichTextCtrl	(	wxWindow * 	parent,
wxWindowID 	id = -1,
const wxString & 	value = wxEmptyString,
const wxPoint & 	pos = wxDefaultPosition,
const wxSize & 	size = wxDefaultSize,
long 	style = wxRE_MULTILINE
)	
2. Add to your wxCrafter form a 'wxRichTextCtrl' control
3. To tell wxCrafter to use MyRichTextCtrl instead of wxRichTextCtrl, in the Subclass category of your newly added wxRichTextCtrl control, set the "Class name" field to "MyRichTextCtrl" and the "include file" to the header file containing this class

Generate your code...

Eran
and set its name in the "subclass"
Make sure you have read the HOW TO POST thread
coder99
CodeLite Expert
Posts: 167
Joined: Wed Oct 22, 2008 6:50 am
Contact:

Re: Custom Control

Post by coder99 »

Thank you very much, Eran.
Following your detailed instructions, really did the trick.
I'll be sure to record this for myself for future reference.

Win 10/11 64-bit, MSVC 2019/2022, wxWidgets 3.2.1, CodeLite 17.0 Mint 21.2

Post Reply