⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdi.cpp

📁 理财小工具
💻 CPP
📖 第 1 页 / 共 4 页
字号:
////////////////////////////////////////////////////////////////////////////// Name:        mdi.cpp// Purpose:     MDI sample// Author:      Julian Smart// Modified by:// Created:     04/01/98// RCS-ID:      $Id: mdi.cpp,v 1.20 2004/04/26 04:25:13 wq1977 Exp $// Copyright:   (c) Julian Smart and Markus Holzem// Licence:     wxWindows license/////////////////////////////////////////////////////////////////////////////// ===========================================================================// declarations// ===========================================================================// ---------------------------------------------------------------------------// headers// ---------------------------------------------------------------------------// For compilers that support precompilation, includes "wx/wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#ifndef WX_PRECOMP    #include "wx/wx.h"    #include "wx/mdi.h"#endif#include "wx/toolbar.h"#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)    #include "mondrian.xpm"#endif#include "bitmaps/new.xpm"#include "bitmaps/open.xpm"#include "bitmaps/save.xpm"#include "bitmaps/copy.xpm"#include "bitmaps/cut.xpm"#include "bitmaps/paste.xpm"#include "icon1.xpm"#include "icon2.xpm"#include "icon3.xpm"#include "icon4.xpm"#include "icon5.xpm"#include <wx/treectrl.h>#include <wx/imaglist.h>#include <wx/datetime.h>#include "wx/grid.h"#include "wx/generic/gridctrl.h"#include "wx/grid.h"#include <wx/memory.h>#include <wx/config.h>#include <wx/accel.h>#include <wx/radiobox.h>#include "math.h"#include "mdi.h"IMPLEMENT_APP(MyApp)// ---------------------------------------------------------------------------// global variables// ---------------------------------------------------------------------------const char *gVersion="0.10";MyFrame *frame = (MyFrame *) NULL;wxList my_children;// For drawing lines in a canvasstatic long xpos = -1;static long ypos = -1;static int gs_nFrames = 0;#include <wx/listimpl.cpp>WX_DEFINE_LIST(MyXmlNodeList);WX_DEFINE_LIST(MonthDataList);WX_DEFINE_LIST(ColourDescList);WX_DEFINE_LIST(childvalueList);// ---------------------------------------------------------------------------// event tables// ---------------------------------------------------------------------------BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame)    EVT_MENU(MDI_ABOUT, MyFrame::OnAbout)    EVT_MENU(MDI_NEW_WINDOW, MyFrame::OnNewWindow)    EVT_MENU(MDI_QUIT, MyFrame::OnQuit)    EVT_MENU(POPUP_CREATEBROWSERWIN, MyFrame::OnCreateBrowserWin)    EVT_MENU(POPUP_ADDMONEYTYPE, MyFrame::OnAddMoneyType)    EVT_MENU(POPUP_DELETETYPE, MyFrame::OnDeleteMoneyType)    EVT_MENU(POPUP_SETASDEFAULT, MyFrame::OnSetDefault)        EVT_MENU(POPUP_SETBASE, MyFrame::OnSetIncomingBase)    EVT_MENU(POPUP_CREATECUSTOMBROWSER, MyFrame::OnCreateCustomBrowser)        EVT_MENU(POPUP_CREATECHART, MyFrame::OnCreateChart)        EVT_MENU(POPUP_CREATECUSTOMCHART, MyFrame::OnCreateCustomChart)        EVT_MENU(VIEW_MONTH_OUT, MyFrame::OnViewMonthOut)    EVT_MENU(TOOL_CALCHOUSEFEE, MyFrame::OnCalcHouseFee)	EVT_TREE_ITEM_RIGHT_CLICK(TreeTest_Ctrl,MyFrame::OnTreeItemRightClick)	EVT_TREE_SEL_CHANGING(TreeTest_Ctrl,MyFrame::OnTreeItemSelChanging)    EVT_CLOSE(MyFrame::OnClose)	    EVT_SIZE(MyFrame::OnSize)END_EVENT_TABLE()// Note that MDI_NEW_WINDOW and MDI_ABOUT commands get passed// to the parent window for processing, so no need to// duplicate event handlers here.BEGIN_EVENT_TABLE(MyChild, wxMDIChildFrame)    EVT_MENU(MDI_CHILD_QUIT, MyChild::OnQuit)    EVT_MENU(MDI_REFRESH, MyChild::OnRefresh)    EVT_MENU(MDI_CHANGE_TITLE, MyChild::OnChangeTitle)    EVT_MENU(MDI_CHANGE_POSITION, MyChild::OnChangePosition)    EVT_MENU(MDI_CHANGE_SIZE, MyChild::OnChangeSize)    EVT_SIZE(MyChild::OnSize)    EVT_MOVE(MyChild::OnMove)    EVT_CLOSE(MyChild::OnClose)END_EVENT_TABLE()BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)    EVT_MOUSE_EVENTS(MyCanvas::OnEvent)END_EVENT_TABLE()BEGIN_EVENT_TABLE(MyGridFrame, wxMDIChildFrame)    EVT_MENU(NORMAL_UP_ID, MyGridFrame::OnUpKeyPress)    EVT_MENU(NORMAL_DOWN_ID, MyGridFrame::OnDownKeyPress)    EVT_MENU(NORMAL_TAB_ID, MyGridFrame::OnTabKeyPress)    EVT_MENU(MDI_CHILD_QUIT, MyGridFrame::OnQuit)    EVT_MENU(POPUP_DELETEREC, MyGridFrame::OnDeleteRec)    EVT_SIZE(MyGridFrame::OnSize)    EVT_CLOSE(MyGridFrame::OnClose)	EVT_TEXT_ENTER(MTEXT_1, MyGridFrame::OnKeyDown)	EVT_TEXT_ENTER(MTEXT_2, MyGridFrame::OnKeyDown)	EVT_TEXT_ENTER(MTEXT_3, MyGridFrame::OnKeyDown)	EVT_GRID_ROW_SIZE(MyGridFrame::OnRowSize)	EVT_GRID_COL_SIZE(MyGridFrame::OnColSize)	EVT_GRID_CELL_CHANGE(MyGridFrame::OnCellValueChanged )	EVT_GRID_CELL_RIGHT_CLICK(MyGridFrame::OnCellRightClick)	END_EVENT_TABLE()BEGIN_EVENT_TABLE(MyCalendarDialog, wxDialog)    EVT_BUTTON(-1, MyCalendarDialog::OnButton)END_EVENT_TABLE()BEGIN_EVENT_TABLE(MyCalcHouseFeeDialog, wxDialog)    EVT_BUTTON(-1, MyCalcHouseFeeDialog::OnButton)END_EVENT_TABLE()BEGIN_EVENT_TABLE(MyStatusBar, wxStatusBar)    EVT_LEFT_DCLICK(MyStatusBar::OnDbClick)END_EVENT_TABLE()// ===========================================================================// implementation// ===========================================================================// ---------------------------------------------------------------------------// MyApp// ---------------------------------------------------------------------------// Initialise this in OnInit, not staticallybool MyApp::OnInit(){    // Create the main frame window    // initialize localisazion	{		/*Borland C++ 5.5 compiler has one error about setLocale.*/		wxLog *logger=new wxLogStderr();		wxLog *pOldLog = wxLog::SetActiveTarget(logger);		m_locale.Init();		wxLog::SetActiveTarget(pOldLog);		delete(logger);    }    m_locale.AddCatalog ("liliMoney");    frame = new MyFrame((wxFrame *)NULL, -1, _("MDI Demo"),                        wxPoint(-1, -1), wxSize(800, 600),                        wxDEFAULT_FRAME_STYLE | wxHSCROLL | wxVSCROLL | wxMAXIMIZE);    // Give it an icon#ifdef __WXMSW__    frame->SetIcon(wxIcon(_T("mdi_icn")));#else    frame->SetIcon(wxIcon( mondrian_xpm ));#endif#if 0	frame->CreateStatusBar();    wxStatusBar *statbarOld = frame->GetStatusBar();    if ( statbarOld )    {        statbarOld->Hide();    }#endif	frame->statusbar = new MyStatusBar(frame,-1);	frame->SetStatusBar(frame->statusbar);	frame->UpdateStatusBar();    frame->Show(TRUE);	frame->PositionStatusBar();		frame->stdata.recheight = 20;	frame->stdata.colswidth[0] = 70;	frame->stdata.colswidth[1] = 70;	frame->stdata.colswidth[2] = 100;	frame->GetAllConfig(&frame->stdata);    SetTopWindow(frame);	wxTreeItemId item = frame->textWindow->GetSelection();	if (item.IsOk())	{		frame->CreateBrowserWindow(&item);	}	else	{		frame->CreateBrowserWindow();	}	wxAcceleratorEntry entries[4];    entries[0].Set(wxACCEL_CTRL, (int) 'N', MDI_NEW_WINDOW);    entries[1].Set(wxACCEL_CTRL, (int) 'X', MDI_QUIT);    entries[2].Set(wxACCEL_CTRL, (int) 'A', MDI_ABOUT);    entries[3].Set(wxACCEL_NORMAL, WXK_F3,  VIEW_MONTH_OUT);	wxAcceleratorTable accel(4, entries);	frame->SetAcceleratorTable(accel);		    return TRUE;}// ---------------------------------------------------------------------------// MyFrame// ---------------------------------------------------------------------------// Define my frame constructorMyFrame::MyFrame(wxWindow *parent,                 const wxWindowID id,                 const wxString& title,                 const wxPoint& pos,                 const wxSize& size,                 const long style)       : wxMDIParentFrame(parent, id, title, pos, size,                          style | wxNO_FULL_REPAINT_ON_RESIZE){			textWindow = new wxTreeCtrl(this, TreeTest_Ctrl,                                wxDefaultPosition, wxDefaultSize,                                wxTR_DEFAULT_STYLE);	//init brush	for (int i=0;i<MAX_COLOR_BRUSH_COUNT;i++)	{		gColorBrush[i]= new  wxBrush(wxColour(colorbase[i][0],colorbase[i][1],colorbase[i][2]),wxSOLID);	}	wxImageList *images = new wxImageList(16, 16, TRUE);	wxIcon icons[5];    icons[0] = wxIcon(icon1_xpm);    icons[1] = wxIcon(icon2_xpm);    icons[2] = wxIcon(icon3_xpm);    icons[3] = wxIcon(icon4_xpm);    icons[4] = wxIcon(icon5_xpm);	textWindow->AssignImageList(images);	for (int i=0;i<5;i++) images->Add(icons[i]);    CreateToolBar(wxNO_BORDER | wxTB_FLAT | wxTB_HORIZONTAL);    InitToolBar(GetToolBar());	moneybook = new MoneyBook("data//lili.xml",textWindow);	moneybook->uiExpendAll(moneybook->rootitem);}MyFrame::~MyFrame(){	delete(moneybook);	for (int i=0;i<MAX_COLOR_BRUSH_COUNT;i++)	{		delete(gColorBrush[i]);	}}void MyFrame::UpdateStatusBar(void){	    MyStatusBar *statbarTop = frame->statusbar;	static const int widthsFor2Fields[] = { -1,150,150,-1};	wxDouble TotalCnt; wxDouble MonthRate; long terms; wxDateTime startdate; long PayMethod;	if (moneybook->GetHousePay(&TotalCnt, &MonthRate, &terms, &startdate, &PayMethod))	{    	statbarTop->SetFieldsCount(4,widthsFor2Fields);			wxDouble lastMonthIn=0,lastMonthOut=0,BaseAcount;		moneybook->GetMonthTotalCnt(moneybook->InComingNode, &lastMonthIn, wxDateTime::Today()-wxDateSpan::Month());		moneybook->GetMonthTotalCnt(moneybook->OutGoingNode, &lastMonthOut, wxDateTime::Today()-wxDateSpan::Month());		BaseAcount = moneybook->GetTotalInComing() + moneybook->GetBaseInComing()  - moneybook->GetTotalOutGoing()				- moneybook->GetBaseOutGoing();		if (lastMonthIn <= lastMonthOut)		{			SetStatusText(_("You can neven payoff your house!"),3);		}		else		{			int i = moneybook->GetMonthCntForPayHouse(TotalCnt, MonthRate, terms, startdate, PayMethod, BaseAcount, lastMonthIn - lastMonthOut, terms);			if (i==-1)			{				SetStatusText(_("Maybe you will delay to pay off your house!"),3);			}			else			{				SetStatusText((wxString::Format(_("You can pay off your house at %s"),((startdate + wxDateSpan::Months(i)).FormatISODate()).c_str())).mb_str(),3);			}		}	}	else	{    	statbarTop->SetFieldsCount(3,widthsFor2Fields);		}	wxDouble monthtotal=0;	moneybook->GetMonthTotalCnt(moneybook->OutGoingNode, &monthtotal);	SetStatusText(wxString::Format(_("Month Total Out:%10.2f"),monthtotal),1);	SetStatusText(wxString::Format(_("Total Acount Left:%9.2f"),		moneybook->GetTotalInComing() + moneybook->GetBaseInComing()  - moneybook->GetTotalOutGoing()		- moneybook->GetBaseOutGoing()),2);}void MyFrame::OnClose(wxCloseEvent& event){    event.Skip();}void MyFrame::OnSetIncomingBase(wxCommandEvent& WXUNUSED(event)){  wxTextEntryDialog dialog(this,                           _("Set Base Acount"),                           _("Please Input the Base Acount:"),                           "0.00",                           wxOK | wxCANCEL);  if (dialog.ShowModal() == wxID_OK)  {  	wxTreeItemId id = textWindow->GetSelection();	if (id.IsOk())	{		wxString str=dialog.GetValue();		wxDouble db;		str.ToDouble(&db);  		if (!moneybook->SetBaseAcount(&id, db))		{			wxLogError(_("Problem when set base count!"));		}		UpdateStatusBar();	}	else	{		wxLogError(_("You Should Choose one base Type!"));	}  	  }}void MyFrame::OnSetDefault(wxCommandEvent& WXUNUSED(event)){    wxTreeItemId id;	  	id = textWindow->GetSelection();	if (id.IsOk())	{  		if (!moneybook->SetDefault(&id))		{			wxLogError(_("Problem when Set Default Type!"));		}	}	  	}bool MyFrame::GetAllConfig(LiliMoneyConfigData *pstdata){    wxConfigBase *cfg = wxConfigBase::Get();	pstdata->recheight=cfg->Read("Record Height",pstdata->recheight);	for (int i=0; i<3; i++)	{		pstdata->colswidth[i]=cfg->Read(wxString::Format("Col %d Width",i),pstdata->colswidth[i]);			}	pstdata->hintinmodify=cfg->Read("ModifyHint",TRUE);	delete wxConfigBase::Set((wxConfigBase *) NULL);	return TRUE;}bool MyFrame::SetAllConfig(LiliMoneyConfigData *pstdata){    wxConfigBase *cfg = wxConfigBase::Get();	cfg->Write("Record Height",pstdata->recheight);	for (int i=0; i<3; i++)	{		cfg->Write(wxString::Format("Col %d Width",i),pstdata->colswidth[i]);			}	cfg->Write("ModifyHint",pstdata->hintinmodify);	delete wxConfigBase::Set((wxConfigBase *) NULL);	return TRUE;}void MyFrame::OnDeleteMoneyType(wxCommandEvent& WXUNUSED(event)){  wxTreeItemId id;	  wxMessageDialog dialog( NULL, _("Are you sure you want delete this type and all subtype and value?"),      _("Message box text"), wxNO_DEFAULT|wxYES_NO|wxICON_INFORMATION);  switch ( dialog.ShowModal() )  {      case wxID_YES:	  	id = textWindow->GetSelection();		if (id.IsOk())		{	  		if (!moneybook->DeleteMoneyType(&id))			{				wxLogError(_("Problem when delete money type!"));			}		}	  	        break;      case wxID_NO:          break;      default:          wxLogError(_("Unexpected wxMessageDialog return code!"));  }	}void MyFrame::CreateMainMenu(wxFrame *parent){    // Make a menubar    wxMenu *file_menu = new wxMenu;    file_menu->Append(MDI_CHILD_QUIT, _("&Close child"), _("Close this window"));    file_menu->Append(MDI_QUIT, _("&Exit"));    wxMenu *view_menu = new wxMenu;    view_menu->Append(VIEW_MONTH_OUT, _("&MonthTotalOut\tF3"));    wxMenu *help_menu = new wxMenu;    help_menu->Append(MDI_ABOUT, _("&About"));    wxMenu *tool_menu = new wxMenu;    tool_menu->Append(TOOL_CALCHOUSEFEE, _("&CalcHouseFee"));    wxMenuBar *menu_bar = new wxMenuBar;    menu_bar->Append(file_menu, _("&File"));    menu_bar->Append(view_menu, _("&View"));    menu_bar->Append(tool_menu, _("&Tool"));    menu_bar->Append(help_menu, _("&Help"));    // Associate the menu bar with the frame    parent->SetMenuBar(menu_bar);	}void MyFrame::CreateChart(wxTreeItemId baseitem, const char* title){	wxTreeItemId item =baseitem;	xmlNodePtr root = NULL;;	if (item.IsOk())	{		xmlnodeTreeItemData* pitemdata;		pitemdata  = (xmlnodeTreeItemData *)textWindow->GetItemData(item);		if (NULL != pitemdata) root = pitemdata->xmlNode;	}	if (root == NULL)	{		root = moneybook->OutGoingNode;	}	    MyChild *subframe = new MyChild(frame, title,                                    wxPoint(-1, -1), wxSize(-1, -1),                                    wxDEFAULT_FRAME_STYLE);	MyXmlNodeList globelist;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -