guneysus
1/10/2015 - 7:58 PM

wx and Fortran

wx and Fortran

extern "C" {
    void setab_(int *a, int *b);
  }

  #include "wx/wx.h"
  class MyApp: public wxApp {
    virtual bool OnInit();
  };

  class MyFrame: public wxFrame {
  public:

    MyFrame(const wxString &title, const wxPoint &pos, const wxSize &size);

    void OnQuit(wxCommandEvent &event);
    void OnAbout(wxCommandEvent &event);

    DECLARE_EVENT_TABLE()
  };

  enum {
    ID_Quit = 1,
    ID_About,
  };

  BEGIN_EVENT_TABLE(MyFrame, wxFrame)
  EVT_MENU(ID_Quit, MyFrame::OnQuit)
  EVT_MENU(ID_About, MyFrame::OnAbout)
  END_EVENT_TABLE()

  IMPLEMENT_APP(MyApp)

  bool MyApp::OnInit() {
    MyFrame *frame = new MyFrame( "Hello, World", wxPoint(50,50), wxSize(450,340) );
    frame->Show(TRUE);
    SetTopWindow(frame);
    return TRUE;
  }

  MyFrame::MyFrame(const wxString &title,
                   const wxPoint &pos,
                   const wxSize &size):
    wxFrame((wxFrame *)NULL, -1, title, pos, size) {

    int length, a, b;
    char status[50];

    wxMenu *menuFile = new wxMenu;
    menuFile->Append(ID_About, "&About...");
    menuFile->AppendSeparator();
    menuFile->Append(ID_Quit, "E&xit");

    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append(menuFile, "&File");
    SetMenuBar(menuBar);
    CreateStatusBar();

    setab_(&a,&b);
    length=sprintf(status, "Welcome to wxWindows: a=%d, b=%d", a, b);
    if (length<=50) {
      SetStatusText(status);
    }
    else {
      SetStatusText("Welcome to wxWindows: a and b not set due to string overflow");
    }

  }

  void MyFrame::OnQuit(wxCommandEvent &WXUNUSED(event)) {
    Close(TRUE);
  }

  void MyFrame::OnAbout(wxCommandEvent &WXUNUSED(event)) {
    wxMessageBox("This is a wxWindows Hello World sample",
                 "About Hello World", wxOK | wxICON_INFORMATION, this);
  }
subroutine setab(a,b)
  integer a, b
  a=3;
  b=5;
  return
end