I have a wxSmith managed wxFrame with a constructor like this
MyFrame::MyFrame( wxWindow* parent, bool bNoBorder )
{
...
//(*Initialze(Myframe)
Create( parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE|wxBORDER_NONE );
...
}
wxSmith hardcodes the window styles from the wxSmith property page checkbox where I can select or unselect wxBORDER_NONE. Above its selected. The selection is at compile time. The variable can only be set during window create, so i can not set it later.
How can I still use wxSmith and control the wxBORDER_NONE style by my variable "bNoBorder"?
How can I still use wxSmith and control the wxBORDER_NONE style by my variable "bNoBorder"?
Go to the "Resources" tab in the C::B management pane. Navigate to your frame class and click it. Scroll down, find and expand the "Style" setting. wxBORDER_NONE is one of many you can enable/disable.
Hi, I think this method is "manually configure the option", and the style value is fixed(constant) after you tweak the wxSmith setting.
What tigerbeard want is a flexiable way, which means the "bool bNoBorder" should be passed to the "Create()" function call.
I don't find a better way to do that inside the wxSmith. But you can use a hack.
For example,
MyFrame::MyFrame( wxWindow* parent, bool bNoBorder )
{
#define wxDEFAULT_FRAME_STYLE bNoBorder // change the wxDEFAULT_FRAME_STYLE to bNoBorder
...
//(*Initialze(Myframe)
Create( parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE );
...
}
Hopefully you don't use any wxDEFAULT_FRAME_STYLE in the following code in the same cpp file.
Or, you can use a better way, you can just restore the macro definition later, see this post: Temporarily overwrite a macro in C preprocessor - Stack Overflow (https://stackoverflow.com/questions/14261534/temporarily-overwrite-a-macro-in-c-preprocessor)
Hope that helps.
Another possibility is to change the style after frame creation, I don't know if it works for all styles, but here is an event handler that changes the frame style at runtime. It workes on both Windows and Linux
void Uview2dFrame::OnStayOnTopCheckBoxClick(wxCommandEvent& event)
{
int style = GetWindowStyle();
if(event.IsChecked())SetWindowStyle(style | wxSTAY_ON_TOP);
else SetWindowStyle(style & ~wxSTAY_ON_TOP);
Refresh();
}
It could well be this is not universally working for all styles though.