#include <wx/wx.h>
#include <wx/wfstream.h>
class MyFileDialog:public wxFrame
{
public:
MyFileDialog(const wxString& title);
protected:
wxTextCtrl* tc;
void OnOpen(wxCommandEvent& event);
void OnOpenStream(wxCommandEvent& event);
};
MyFileDialog::MyFileDialog(const wxString& title)
:wxFrame(NULL,-1,title)
{
wxMenuBar* mainBar = new wxMenuBar;
wxMenu* file = new wxMenu;
wxMenuItem *loadFile = new wxMenuItem(file,-1,"Load from file");
file->Append(loadFile);
wxMenuItem* fileStream = new wxMenuItem(file,-1,"load from stream");
file->Append(fileStream);
mainBar->Append(file,"File");
SetMenuBar(mainBar);
Bind(wxEVT_COMMAND_MENU_SELECTED,MyFileDialog::OnOpen,this,loadFile->GetId());
Bind(wxEVT_COMMAND_MENU_SELECTED,MyFileDialog::OnOpenStream,this,fileStream->GetId());
tc = new wxTextCtrl(this,-1,"",wxPoint(-1,-1)
,wxSize(-1,-1),wxTE_MULTILINE);
Centre();
}
void MyFileDialog::OnOpen(wxCommandEvent& event)
{
// wxFileDialog* dialog =new wxFileDialog(this);
wxFileDialog* dialog =new wxFileDialog(this,("Open txt file"),"",""
,"txt (*.txt)|*.txt",
wxFD_OPEN|wxFD_FILE_MUST_EXIST);
if(dialog->ShowModal() == wxID_OK)
{
wxString fileName = dialog->GetPath();
tc->AppendText(dialog->GetFilename());
tc->LoadFile(fileName);
}
}
void MyFileDialog::OnOpenStream(wxCommandEvent& event)
{
wxFileDialog* dialog = new wxFileDialog(this,"Open txt file","",""
,"txt (*.txt)|*.txt",
wxFD_OPEN|wxFD_FILE_MUST_EXIST);
if (dialog->ShowModal() == wxID_OK)
{
wxFileInputStream stream(dialog->GetPath());
if(!stream.IsOk())
{
wxLogError("Cannot open file '%s'",dialog->GetPath());
wxMessageBox("error","");
return;
}
tc->Clear();
int byteCount = stream.GetLength();
tc->AppendText(wxString::Format(wxT("数量 = %i\n"),byteCount));
char buffer[byteCount];
stream.ReadAll(buffer,byteCount);
tc->AppendText(buffer);
}
}