CodeLite+wxWidgets跨平台C++库开发(一,模板代码解读)

上一节我们通过CodeLite的模板建立了一个wxWidgets的GUI项目wxFrame1,这个工程包含了四个文件:gui.h、gui.cpp、main.h、main.cpp。

gui.h和gui.cpp中声明和实现了MainFrameBase类,该类继承于wxFrame类

main.h和main.cpp中声明和实现了MainFrame类,该类继承于MainFrameBase类

在MainFrameBase类中实现与窗体界面相关的代码,在MaianFrame类中实现事件处理的相关代码,这样将窗体界面和事件处理在逻辑上剥离。

 

先来看看gui.h和gui.cpp的完整源代码,省事点,直接在原来代码上加注释

 

 

///////////////////////////////////////////////////////////////////////////

// C++ code generated with wxFormBuilder (version Feb  8 2009)

// http://www.wxformbuilder.org/

//

// PLEASE DO "NOT" EDIT THIS FILE!

///////////////////////////////////////////////////////////////////////////

 

#ifndef __gui__

#define __gui__

 


//引用必备的头文件


#include <wx/intl.h>

 

#include <wx/string.h>

#include <wx/bitmap.h>

#include <wx/image.h>

#include <wx/icon.h>

#include <wx/menu.h>

#include <wx/gdicmn.h>

#include <wx/font.h>

#include <wx/colour.h>

#include <wx/settings.h>

#include <wx/sizer.h>

#include <wx/statusbr.h>

#include <wx/frame.h>

 

///////////////////////////////////////////////////////////////////////////

 

 

///////////////////////////////////////////////////////////////////////////////

/// Class MainFrameBase

///////////////////////////////////////////////////////////////////////////////

class MainFrameBase : public wxFrame 

{

private:

 

protected:

//菜单栏

wxMenuBar* m_menuBar;

//主菜单

wxMenu* m_menuFile;

//状态栏

wxStatusBar* m_statusBar;

 

// Virtual event handlers, overide them in your derived class

//虚事件处理函数,这里直接用event.Skip()忽略掉

virtual void OnCloseFrame( wxCloseEvent& event ) { event.Skip(); }

virtual void OnExitClick( wxCommandEvent& event ) { event.Skip(); }

 

 

public:

//主窗体构造函数

 

MainFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("wxMiniApp"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );

~MainFrameBase();

 

};

 

#endif //__gui__

 

 

 

 

 

下面是gui.cpp的源码

 

 

///////////////////////////////////////////////////////////////////////////

// C++ code generated with wxFormBuilder (version Feb  8 2009)

// http://www.wxformbuilder.org/

//

// PLEASE DO "NOT" EDIT THIS FILE!

///////////////////////////////////////////////////////////////////////////

 

#include "gui.h"

 

///////////////////////////////////////////////////////////////////////////

 

//在这个函数里实现主窗体和其中控件的创建和初始化

MainFrameBase::MainFrameBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )

{

this->SetSizeHints( wxDefaultSize, wxDefaultSize );

//创建菜单栏

 

m_menuBar = new wxMenuBar( 0 );

//创建顶级菜单

m_menuFile = new wxMenu();

//创建一个菜单项,--退出功能

wxMenuItem* menuFileExit;

menuFileExit = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("E&xit") ) + wxT('/t') + wxT("Alt+X"), wxEmptyString, wxITEM_NORMAL );

//将刚刚创建的菜单项添加到顶级菜单中

m_menuFile->Append( menuFileExit );

//将刚刚创建的顶级菜单添加到菜单栏中

 

m_menuBar->Append( m_menuFile, _("&File") );

//将创建的菜单栏与主窗体关联

 

this->SetMenuBar( m_menuBar );

//创建boxsize控件

 

wxBoxSizer* mainSizer;

mainSizer = new wxBoxSizer( wxVERTICAL );

//将刚刚创建的boxsizer与主窗体关联

 

this->SetSizer( mainSizer );

this->Layout();

//创建状态条控件

m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY );

 

this->Centre( wxBOTH );

 

// Connect Events

//将窗体中事件与事件处理函数关联

//这里的事件处理函数均在main.cpp中实现

//将窗体关闭事件与OnCloseFrame()函数关联

this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );

this->Connect( menuFileExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnExitClick ) );

}

 

MainFrameBase::~MainFrameBase()

{

// Disconnect Events

//解除事件与其处理函数的关联

this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainFrameBase::OnCloseFrame ) );

this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainFrameBase::OnExitClick ) );

}

再来看看main.h和main.cpp
/*********************************************************************
 * Name:       main.h
 * Purpose:   Declares simple wxWidgets application with GUI
 * created using wxFormBuilder.
 * Author:    
 * Created:   
 * Copyright: 
 * License:   wxWidgets license (www.wxwidgets.org)
 * 
 * Notes: Note that all GUI creation code is declared in
 * gui.h source file which is generated by wxFormBuilder.
 *********************************************************************/
#ifndef __main__
#define __main__
// main wxWidgets header file
#include <wx/wx.h>
// gui classes generated by wxFormBuilder
#include "gui.h"
////////////////////////////////////////////////////////////////////////////////
// application class declaration 
////////////////////////////////////////////////////////////////////////////////
class MainApp : public wxApp
{
public:
virtual bool OnInit();
};
// declare global static function wxGetApp()
DECLARE_APP(MainApp)
////////////////////////////////////////////////////////////////////////////////
// main application frame declaration 
////////////////////////////////////////////////////////////////////////////////
class MainFrame : public MainFrameBase
{
public:
MainFrame( wxWindow *parent );
virtual ~MainFrame();
protected:
// protected event handlers
virtual void OnCloseFrame( wxCloseEvent& event );
virtual void OnExitClick( wxCommandEvent& event );
};
#endif //__main__
下面是main.cpp的源码 
/*********************************************************************
 * Name:       main.cpp
 * Purpose:   Implements simple wxWidgets application with GUI
 * created using wxFormBuilder.
 * Author:    
 * Created:   
 * Copyright: 
 * License:   wxWidgets license (www.wxwidgets.org)
 * 
 * Notes: Note that all GUI creation code is implemented in
 * gui.cpp source file which is generated by wxFormBuilder.
 *********************************************************************/
#include "main.h"
// initialize the application
IMPLEMENT_APP(MainApp);
////////////////////////////////////////////////////////////////////////////////
// application class implementation 
////////////////////////////////////////////////////////////////////////////////
bool MainApp::OnInit()
{
//设置窗体为置顶
SetTopWindow( new MainFrame( NULL ) );
//显示窗体
GetTopWindow()->Show();
// true = enter the main loop
return true;
}
////////////////////////////////////////////////////////////////////////////////
// main application frame implementation 
////////////////////////////////////////////////////////////////////////////////
MainFrame::MainFrame(wxWindow *parent) : MainFrameBase( parent )
{
}
MainFrame::~MainFrame()
{
}
void MainFrame::OnCloseFrame(wxCloseEvent& event)
{
Destroy();
}
void MainFrame::OnExitClick(wxCommandEvent& event)
{
Destroy();
}

 

你可能感兴趣的:(C++,command,File,application,跨平台,traversal)