Re: Fruit basket program in C++ with WxWidgets

  • From: Jamal Mazrui <empower@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Sat, 1 Dec 2007 12:57:59 -0500 (EST)

Since you said it was coming soon, I've been waiting for a tutorial on
compiling a C++/Wx application (as opposed to the Wx libraries) ....
<grin>  The lack of response so far on this question from any C++
developer on the list leads me to infer that the process is more complex
than I anticipated, even when one already knows the C++ language.  If
someone posted a question about how to build a .NET executable with a
3rd party assembly, I could have quickly answered with specifics.   This
is not intended as a criticism of anyone and their schedules -- just an
observation of C++ development that is being personally substantiated
for me.

Jamal
On Sat, 1 Dec 2007, jaffar wrote:

> Date: Sat, 1 Dec 2007 22:09:24 +0800
> From: jaffar <jaffar@xxxxxxxxxxxxx>
> Reply-To: programmingblind@xxxxxxxxxxxxx
> To: programmingblind@xxxxxxxxxxxxx
> Subject: Re: Fruit basket program in C++ with WxWidgets
>
> Hi Jamal.  I'll compile it on monday or tuesday as I have a family event
> during the week end and unfortunately cannot spare the time.  I'll do it
> during lunch time in my office.  Cheers!
> ----- Original Message -----
> From: "Jamal Mazrui" <empower@xxxxxxxxx>
> To: <programmingblind@xxxxxxxxxxxxx>
> Sent: Friday, November 30, 2007 11:57 PM
> Subject: Re: Fruit basket program in C++ with WxWidgets
>
>
> As far as I can tell, the call to the VC++ compiler does not include the
> /clr parameter, so there should not be a .NET dependency.  Also, since I
> think Octavian has .NET installed, the program should be able to find
> the .NET dependency if that were true, especially if the .manifest file
> is in the same directory.  I suspect (though am not sure) that the
> dependency is on a file in the Windows platform SDK that I installed, and
> perhaps Octavian did not.
>
>   If you are referring to another , earlier message thread in which Will
> posted about this problem, I could not find it via Google.
>
> Marlon, what C++ compilers do you use?  Do you use any free ones or know
> how to use them?  Can you help me compile the Wx source code with MinGW or
> Borland C++ Builder so that it is a single, self-standing executable
> (whatever the size)?  The complete source code is in the cwx_fruit.cpp
> file within the archive at
> http://www.EmpowermentZone.com/cwx_fruit.zip
>
> Jamal
> On Fri, 30 Nov 2007, Marlon
> Brandão de Sousa wrote:
>
> > Date: Fri, 30 Nov 2007 12:52:12 -0200
> > From: Marlon Brandão de Sousa <splyt.lists@xxxxxxxxx>
> > Reply-To: programmingblind@xxxxxxxxxxxxx
> > To: programmingblind@xxxxxxxxxxxxx
> > Subject: Re: Fruit basket program in C++ with WxWidgets
> >
> > I think it isn't a .net dependency. Vc .net 2005 uses a kind of
> > manifest to link to the right version of the C crt, a kind of
> > (personal thought here) ridiculous thing ms did to try to avoid dll
> > hell ... and you have to embed this manifest in your executable or
> > redistribute it with your software. I don't know how to do it, but
> > Will Pearson talked about this some time ago in this list.
> > Marlon
> >
> > 2007/11/30, Jamal Mazrui <empower@xxxxxxxxx>:
> > > Jaffar or other C++ developers,
> > > Apparently, the Win32 executable I built has dependencies that I do not
> > > intend.  Can you help me build a version as a single, self-standing
> > > executable, preferrably with the same VC++ compiler?  Doing so with any
> > > other free C++ compiler would also be of interest.
> > >
> > > Jamal
> > > On Thu, 29 Nov 2007,
> > > Octavian Rasnita wrote:
> > >
> > > > Date: Thu, 29 Nov 2007 08:03:22 +0200
> > > > From: Octavian Rasnita <orasnita@xxxxxxxxx>
> > > > Reply-To: programmingblind@xxxxxxxxxxxxx
> > > > To: programmingblind@xxxxxxxxxxxxx
> > > > Subject: Re: Fruit basket program in C++ with WxWidgets
> > > >
> > > > Hi,
> > > >
> > > > I have tried to run the executable, but the following error appeared:
> > > >
> > > > This application has failed to start because the application
> > > > configuration
> > > > is incorrect. Reinstalling the application may
> > > > fix this problem.
> > > > OK
> > > >
> > > > Does anyone know in what programming language and with which GUI
> > > > library
> > > is
> > > > made the program UTorrent?
> > > >
> > > > Thanks.
> > > >
> > > > Octavian
> > > >
> > > > ----- Original Message -----
> > > > From: "Jamal Mazrui" <empower@xxxxxxxxx>
> > > > To: <programmingblind@xxxxxxxxxxxxx>
> > > > Sent: Wednesday, November 28, 2007 9:04 PM
> > > > Subject: Fruit basket program in C++ with WxWidgets
> > > >
> > > >
> > > > > From the archive at
> > > > > http://www.EmpowermentZone.com/cwx_fruit.zip
> > > > >
> > > > > This fruit basket program is written in C++, using the open source
> > > > > WxWidgets GUI library and application framework available from
> > > > > http://WxWidgets.org
> > > > >
> > > > > The program is compiled with the free Microsoft Visual C++ Express
> > > > > Edition, available from
> > > > > http://msdn.microsoft.com
> > > > > Another download needed from there is the Windows Platform SDK.
> > > > >
> > > > > This is my first nontrivial program in C++, so I encourage others to
> > > > > suggest improvements to the code.  I am also interested in comparing
> > > > > binaries produced by other free C++ compilers, including MinGW and
> > > Borland
> > > > > C++ Builder, which should be able to compile the same code if
> > > > > properly
> > > > > configured for Wx application development.
> > > > >
> > > > > To aid comprehension, I have tried to make the code minimalist in
> > > nature.
> > > > > It is contained in a single file, cwx_fruit.cpp (also pasted below),
> > > with
> > > > > no custom include or resource files.  I have not yet learned how to
> > > > > compile a Wx program by writing a make file or configuring Visual
> > > Studio,
> > > > > but was able to use the make file that comes with the "Minimal"
> > > > > sample
> > > > > program in the Wx distribution.  I simply replaced the minimal.cpp
> > > > > file
> > > > > with the content of cwx_fruit.cpp, and then renamed the resulting
> > > > > executable from minimal.exe to cwx_fruit.exe.
> > > > >
> > > > > With Unicode and release compilation options, that executable was
> > > > > about
> > > > > 1.1 MB in size.  I reduced it by two thirds -- to about 373KB --
> > > > > using
> > > the
> > > > > free "Ultimate Packer for Executables" utility available from
> > > > > http://upx.sourceforge.net
> > > > >
> > > > > Besides the executable, a manifest file, under 1KB in size, is
> > > > > currently
> > > > > needed in the same directory in order to run the program.  A .NET
> > > > > Framework dependency might also exist, since this C++ compiler can
> > > produce
> > > > > executables with such a dependency if proper parameters were not
> > > > > used (I
> > > > > have not understood the make file enough to know).  I would
> > > > > appreciate
> > > > > assistance in eliminating the need for a seperate
> > > > > cwx_fruit.exe.manifest
> > > > > file, as well as ensuring that no .NET dependency exists.  I think
> > > > > this
> > > > > compiler is capable of producing a self-standing Win32 executable,
> > > though
> > > > > the file size may increase.
> > > > >
> > > > > Jamal
> > > > >
> > > > > /*
> > > > > Content of cwx_fruit.cpp
> > > > > Fruit basket program in C++ with WxWidgets 2.8
> > > > > Compiled with Microsoft Visual C++ 2005 Express
> > > > > Public domain by Jamal Mazrui
> > > > > */
> > > > >
> > > > > // Import headers
> > > > > #include "wx/wx.h"
> > > > >
> > > > > // Derive custom dialog class
> > > > > class FbDialog : public wxDialog {
> > > > >
> > > > > public:
> > > > > // Declare control variables
> > > > > wxTextCtrl *txtFruit;
> > > > > wxListBox *lstBasket;
> > > > > wxButton *btnAdd, *btnDelete;
> > > > >
> > > > > // Define add event handler
> > > > > void OnAdd(wxCommandEvent& WXUNUSED(event)) {
> > > > > wxString sValue = txtFruit->GetValue();
> > > > > if (sValue == wxEmptyString) {
> > > > > wxMessageBox(wxT("No fruit to add!"), wxT("Alert"));
> > > > > }
> > > > > else {
> > > > > lstBasket->Append(sValue);
> > > > > txtFruit->Clear();
> > > > > int iFruit = lstBasket->GetCount() - 1;
> > > > > lstBasket->SetSelection(iFruit);
> > > > > }
> > > > > } // OnAdd event handler
> > > > >
> > > > > // Define delete event handler
> > > > > void OnDelete(wxCommandEvent& WXUNUSED(event)) {
> > > > > int iFruit = lstBasket->GetSelection();
> > > > > if (iFruit == -1) {
> > > > > wxMessageBox(wxT("No fruit to delete!"), wxT("Alert"));
> > > > > }
> > > > > else {
> > > > > lstBasket->Delete(iFruit);
> > > > > if (iFruit == lstBasket->GetCount()) {iFruit--;}
> > > > > lstBasket->SetSelection(iFruit);
> > > > > }
> > > > > } // OnDelete event handler
> > > > >
> > > > > // Define close event handler
> > > > > void OnClose(wxCloseEvent& event) {
> > > > > if (wxMessageBox(wxT("Exit program?"), wxT("Confirm"), wxYES_NO |
> > > > > wxCANCEL) == wxYES) {
> > > > > Destroy();
> > > > > event.Skip();
> > > > > }
> > > > > else {
> > > > > event.Veto();
> > > > > }
> > > > > } // OnClose event handler
> > > > >
> > > > > // Define dialog constructor
> > > > > //FbDialog::FbDialog() : wxDialog(NULL, wxID_ANY, wxT("Fruit
> > > > > Basket"),
> > > > > wxDefaultPosition, wxSize(513, 176)) {
> > > > > FbDialog() : wxDialog(NULL, wxID_ANY, wxT("Fruit Basket"),
> > > > > wxDefaultPosition, wxSize(513, 176)) {
> > > > > new wxStaticText(this, wxID_ANY, wxT("&Fruit:"), wxPoint(14, 14),
> > > > > wxDefaultSize);
> > > > > txtFruit = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxPoint(43,
> > > 14),
> > > > > wxDefaultSize, wxTE_LEFT);
> > > > >
> > > > > new wxStaticText(this, wxID_ANY, wxT("&Basket:"), wxPoint(251, 14),
> > > > > wxDefaultSize);
> > > > > lstBasket = new wxListBox(this, wxID_ANY, wxPoint(293,14),
> > > wxDefaultSize,
> > > > > 0);
> > > > >
> > > > > btnAdd = new wxButton(this, wxID_ANY, wxT("&Add"), wxPoint(190,
> > > > > 121),
> > > > > wxDefaultSize);
> > > > > btnAdd->SetDefault();
> > > > > Connect(btnAdd->GetId(), wxEVT_COMMAND_BUTTON_CLICKED,
> > > > > wxCommandEventHandler(FbDialog::OnAdd));
> > > > >
> > > > > btnDelete = new wxButton(this, wxID_ANY, wxT("&Delete"),
> > > > > wxPoint(217,
> > > > > 121), wxDefaultSize);
> > > > > Connect(btnDelete->GetId(), wxEVT_COMMAND_BUTTON_CLICKED,
> > > > > wxCommandEventHandler(FbDialog::OnDelete));
> > > > >
> > > > > Connect(wxID_ANY, wxEVT_CLOSE_WINDOW,
> > > > > wxCloseEventHandler(FbDialog::OnClose));
> > > > >
> > > > > Centre();
> > > > > ShowModal();
> > > > > } // FbDialog constructor
> > > > >
> > > > > }; // FbDialog class
> > > > >
> > > > > // Derive custom application class
> > > > > class FbApp : public wxApp {
> > > > >
> > > > > public:
> > > > > bool OnInit() {
> > > > > new FbDialog();
> > > > > return true;
> > > > > } // Init method
> > > > >
> > > > > }; // FbApp class
> > > > >
> > > > > // Define main entry point via compiler macro
> > > > > IMPLEMENT_APP(FbApp)
> > > > >
> > > > > // End of cwx_fruit.cpp
> > > > >
> > > > > __________
> > > > > View the list's information and change your settings at
> > > > > //www.freelists.org/list/programmingblind
> > > > >
> > > >
> > > > __________
> > > > View the list's information and change your settings at
> > > > //www.freelists.org/list/programmingblind
> > > >
> > > __________
> > > View the list's information and change your settings at
> > > //www.freelists.org/list/programmingblind
> > >
> > >
> >
> >
> > --
> > When you say "I wrote a program that crashed Windows," people just
> > stare at you blankly and say "Hey, I got those with the system, for
> > free."
> > Linus Torvalds
> > __________
> > View the list's information and change your settings at
> > //www.freelists.org/list/programmingblind
> >
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
__________
View the list's information and change your settings at
//www.freelists.org/list/programmingblind

Other related posts: