User forums > Using Code::Blocks

wxSmith question Window styles

(1/2) > >>

tigerbeard:
I have a wxSmith managed wxFrame with a constructor like this

--- Code: ---MyFrame::MyFrame( wxWindow* parent, bool bNoBorder )
{
 ...
 //(*Initialze(Myframe)
 Create( parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE|wxBORDER_NONE );
 ...
}
--- End code ---

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"?

cacb:

--- Quote from: tigerbeard on February 03, 2024, 09:25:46 am ---How can I still use wxSmith and control the wxBORDER_NONE style by my variable "bNoBorder"?

--- End quote ---

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.

ollydbg:

--- Quote from: cacb on February 03, 2024, 08:30:50 pm ---
--- Quote from: tigerbeard on February 03, 2024, 09:25:46 am ---How can I still use wxSmith and control the wxBORDER_NONE style by my variable "bNoBorder"?

--- End quote ---

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.

--- End quote ---

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,


--- Code: ---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 );
 ...
}


--- End code ---

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

Hope that helps.

cacb:
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


--- Code: ---void Uview2dFrame::OnStayOnTopCheckBoxClick(wxCommandEvent& event)
{
   int style = GetWindowStyle();
   if(event.IsChecked())SetWindowStyle(style | wxSTAY_ON_TOP);
   else                 SetWindowStyle(style & ~wxSTAY_ON_TOP);
   Refresh();
}
--- End code ---
It could well be this is not universally working for all styles though.

tigerbeard:

--- Quote from: cacb on February 04, 2024, 10:15:14 am ---Another possibility is to change the style after frame creation, I don't know if it works for all styles,

--- End quote ---

thats why i wrote
--- Quote ---The variable can only be set during window create, so i can not set it later.
--- End quote ---

Navigation

[0] Message Index

[#] Next page

Go to full version