UI采用wxWidgets库进行设计,使用了wxAuiManager进行界面管理,分层浮动布局。详细见代码注释:
一、头文件定义
///
// Name: UI.h
// Purpose: 文件打包管理器布局
// Author: 陈相礼
// Modified by:
// Created: 2009-7-29
// RCS-ID:
// Copyright: (C) Copyright 2009, TSong Corporation, All Rights Reserved.
// Licence:
///
// -- application 类 --
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
// pre-declared and used in class MyFrame
class wxSizeReportCtrl;
// -- frame --
class MyFrame : public wxFrame
{
enum
{
LIST_CTRL,
ID_CustomizeToolbar,
ID_DropDownToolbarItem,
MENU_ID_NEW,
MENU_ID_OPEN,
MENU_ID_ROPEN,
MENU_ID_CLOSE,
MENU_ID_HISTORY,
MENU_ID_INFO,
MENU_ID_EXIT,
MENU_ID_TOOL,
MENU_ID_PREVIEW,
MENU_ID_BIGICON,
MENU_ID_SMALLICON,
MENU_ID_LISTICON,
MENU_ID_DETAILICON,
MENU_ID_OPENFILE,
MENU_ID_OPENMODE,
MENU_ID_UNZIP,
MENU_ID_RENAME,
MENU_ID_DELETE,
MENU_ID_ATTRIBUTE,
MENU_ID_NEWFOLDER,
MENU_ID_ADDFILE,
MENU_ID_ADDFOLDER,
MENU_ID_SELECTLISTFILE,
MENU_ID_UNZIPALL,
MENU_ID_REZIP,
MENU_ID_FILETYPEOPTION,
MENU_ID_LANGUAGE,
MENU_ID_ENGLISH,
MENU_ID_CHINESE,
MENU_ID_RUSSIAN,
MENU_ID_SETDEFAULT,
MENU_ID_SETTING,
MENU_ID_ABOUT,
MENU_ID_TEST,
};
public:
MyFrame(wxWindow* parent,
wxWindowID id,
const wxString& title,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE | wxSUNKEN_BORDER);
~MyFrame();
wxAuiDockArt* GetDockArt();
void DoUpdate();
private:
wxTextCtrl* CreateTextCtrl(const wxString& text = wxEmptyString);
wxTreeCtrl* CreateTreeCtrl( wxString StrPath, wxTreeItemId faItem );
wxPoint GetStartPosition();
wxListCtrl* CreateListCtrl(wxWindow* parent = NULL, long style = wxLC_LIST);
wxAuiNotebook* CreateNotebook();
private:
void OnEraseBackground(wxEraseEvent& evt);
void OnSize(wxSizeEvent& evt);
void OnHide(wxCommandEvent& evt);
void OnShow(wxCommandEvent& evt);
void OnOpen(wxCommandEvent& evt);
void OnAddFile(wxCommandEvent& evt);
void OnAddFolder(wxCommandEvent& evt);
void OnDropDownToolbarItem(wxAuiToolBarEvent& evt);
void OnRestorePerspective(wxCommandEvent& evt);
void OnSettings(wxCommandEvent& evt);
void OnCustomizeToolbar(wxCommandEvent& evt);
void OnExit(wxCommandEvent& evt);
void OnAbout(wxCommandEvent& evt);
void ShowContextMenu(const wxPoint& pos);
void OnContextMenu(wxContextMenuEvent& event);
void OnChangeListStyle(wxCommandEvent& evt);
private:
wxAuiManager m_mgr; // Aui管理器
wxAuiNotebook* ctrl;
wxTreeCtrl* tree; // 树形控件,测试
wxListCtrl* m_listCtrl; // 列表框控件,测试
wxImageList *m_imageListNormal;// 列表框图标
wxImageList *m_imageListSmall; // 同上
wxArrayString m_perspectives;
long m_notebook_style; // 样式
bool flag_tool, flag_preview;// 查看菜单中用于控制显示工具栏和预览窗口之用
DECLARE_EVENT_TABLE()
};
// 界面显示设置对话框
class SettingsPanel : public wxPanel
{
enum
{
ID_PaneBorderSize = wxID_HIGHEST+1,
ID_SashSize,
ID_CaptionSize,
ID_BackgroundColor,
ID_SashColor,
ID_InactiveCaptionColor,
ID_InactiveCaptionGradientColor,
ID_InactiveCaptionTextColor,
ID_ActiveCaptionColor,
ID_ActiveCaptionGradientColor,
ID_ActiveCaptionTextColor,
ID_BorderColor,
ID_GripperColor
};
public:
SettingsPanel(wxWindow* parent, MyFrame* frame)
: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize),
m_frame(frame)
{
wxBoxSizer* s1 = new wxBoxSizer(wxHORIZONTAL);
m_border_size = new wxSpinCtrl(this, ID_PaneBorderSize, wxString::Format(wxT("%d"), frame->GetDockArt()->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE)), wxDefaultPosition, wxSize(50,20), wxSP_ARROW_KEYS, 0, 100, frame->GetDockArt()->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE));
s1->Add(1, 1, 1, wxEXPAND);
s1->Add(new wxStaticText(this, wxID_ANY, wxT("面板边缘尺寸:")));
s1->Add(m_border_size);
s1->Add(1, 1, 1, wxEXPAND);
s1->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s2 = new wxBoxSizer(wxHORIZONTAL);
m_sash_size = new wxSpinCtrl(this, ID_SashSize, wxString::Format(wxT("%d"), frame->GetDockArt()->GetMetric(wxAUI_DOCKART_SASH_SIZE)), wxDefaultPosition, wxSize(50,20), wxSP_ARROW_KEYS, 0, 100, frame->GetDockArt()->GetMetric(wxAUI_DOCKART_SASH_SIZE));
s2->Add(1, 1, 1, wxEXPAND);
s2->Add(new wxStaticText(this, wxID_ANY, wxT("窗框大小:")));
s2->Add(m_sash_size);
s2->Add(1, 1, 1, wxEXPAND);
s2->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s3 = new wxBoxSizer(wxHORIZONTAL);
m_caption_size = new wxSpinCtrl(this, ID_CaptionSize, wxString::Format(wxT("%d"), frame->GetDockArt()->GetMetric(wxAUI_DOCKART_CAPTION_SIZE)), wxDefaultPosition, wxSize(50,20), wxSP_ARROW_KEYS, 0, 100, frame->GetDockArt()->GetMetric(wxAUI_DOCKART_CAPTION_SIZE));
s3->Add(1, 1, 1, wxEXPAND);
s3->Add(new wxStaticText(this, wxID_ANY, wxT("标题大小:")));
s3->Add(m_caption_size);
s3->Add(1, 1, 1, wxEXPAND);
s3->SetItemMinSize((size_t)1, 180, 20);
wxBitmap b = CreateColorBitmap(*wxBLACK);
wxBoxSizer* s4 = new wxBoxSizer(wxHORIZONTAL);
m_background_color = new wxBitmapButton(this, ID_BackgroundColor, b, wxDefaultPosition, wxSize(50,25));
s4->Add(1, 1, 1, wxEXPAND);
s4->Add(new wxStaticText(this, wxID_ANY, wxT("背景颜色:")));
s4->Add(m_background_color);
s4->Add(1, 1, 1, wxEXPAND);
s4->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s5 = new wxBoxSizer(wxHORIZONTAL);
m_sash_color = new wxBitmapButton(this, ID_SashColor, b, wxDefaultPosition, wxSize(50,25));
s5->Add(1, 1, 1, wxEXPAND);
s5->Add(new wxStaticText(this, wxID_ANY, wxT("边框颜色:")));
s5->Add(m_sash_color);
s5->Add(1, 1, 1, wxEXPAND);
s5->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s6 = new wxBoxSizer(wxHORIZONTAL);
m_inactive_caption_color = new wxBitmapButton(this, ID_InactiveCaptionColor, b, wxDefaultPosition, wxSize(50,25));
s6->Add(1, 1, 1, wxEXPAND);
s6->Add(new wxStaticText(this, wxID_ANY, wxT("正常标题颜色:")));
s6->Add(m_inactive_caption_color);
s6->Add(1, 1, 1, wxEXPAND);
s6->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s7 = new wxBoxSizer(wxHORIZONTAL);
m_inactive_caption_gradient_color = new wxBitmapButton(this, ID_InactiveCaptionGradientColor, b, wxDefaultPosition, wxSize(50,25));
s7->Add(1, 1, 1, wxEXPAND);
s7->Add(new wxStaticText(this, wxID_ANY, wxT("正常标题渐变色:")));
s7->Add(m_inactive_caption_gradient_color);
s7->Add(1, 1, 1, wxEXPAND);
s7->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s8 = new wxBoxSizer(wxHORIZONTAL);
m_inactive_caption_text_color = new wxBitmapButton(this, ID_InactiveCaptionTextColor, b, wxDefaultPosition, wxSize(50,25));
s8->Add(1, 1, 1, wxEXPAND);
s8->Add(new wxStaticText(this, wxID_ANY, wxT("正常标题文本色:")));
s8->Add(m_inactive_caption_text_color);
s8->Add(1, 1, 1, wxEXPAND);
s8->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s9 = new wxBoxSizer(wxHORIZONTAL);
m_active_caption_color = new wxBitmapButton(this, ID_ActiveCaptionColor, b, wxDefaultPosition, wxSize(50,25));
s9->Add(1, 1, 1, wxEXPAND);
s9->Add(new wxStaticText(this, wxID_ANY, wxT("活动标题颜色:")));
s9->Add(m_active_caption_color);
s9->Add(1, 1, 1, wxEXPAND);
s9->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s10 = new wxBoxSizer(wxHORIZONTAL);
m_active_caption_gradient_color = new wxBitmapButton(this, ID_ActiveCaptionGradientColor, b, wxDefaultPosition, wxSize(50,25));
s10->Add(1, 1, 1, wxEXPAND);
s10->Add(new wxStaticText(this, wxID_ANY, wxT("活动标题渐变色:")));
s10->Add(m_active_caption_gradient_color);
s10->Add(1, 1, 1, wxEXPAND);
s10->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s11 = new wxBoxSizer(wxHORIZONTAL);
m_active_caption_text_color = new wxBitmapButton(this, ID_ActiveCaptionTextColor, b, wxDefaultPosition, wxSize(50,25));
s11->Add(1, 1, 1, wxEXPAND);
s11->Add(new wxStaticText(this, wxID_ANY, wxT("活动标题文本色:")));
s11->Add(m_active_caption_text_color);
s11->Add(1, 1, 1, wxEXPAND);
s11->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s12 = new wxBoxSizer(wxHORIZONTAL);
m_border_color = new wxBitmapButton(this, ID_BorderColor, b, wxDefaultPosition, wxSize(50,25));
s12->Add(1, 1, 1, wxEXPAND);
s12->Add(new wxStaticText(this, wxID_ANY, wxT("边框颜色:")));
s12->Add(m_border_color);
s12->Add(1, 1, 1, wxEXPAND);
s12->SetItemMinSize((size_t)1, 180, 20);
wxBoxSizer* s13 = new wxBoxSizer(wxHORIZONTAL);
m_gripper_color = new wxBitmapButton(this, ID_GripperColor, b, wxDefaultPosition, wxSize(50,25));
s13->Add(1, 1, 1, wxEXPAND);
s13->Add(new wxStaticText(this, wxID_ANY, wxT("夹子颜色:")));
s13->Add(m_gripper_color);
s13->Add(1, 1, 1, wxEXPAND);
s13->SetItemMinSize((size_t)1, 180, 20);
wxGridSizer* grid_sizer = new wxGridSizer(2);
grid_sizer->SetHGap(5);
grid_sizer->Add(s1); grid_sizer->Add(s4);
grid_sizer->Add(s2); grid_sizer->Add(s5);
grid_sizer->Add(s3); grid_sizer->Add(s13);
grid_sizer->Add(1,1); grid_sizer->Add(s12);
grid_sizer->Add(s6); grid_sizer->Add(s9);
grid_sizer->Add(s7); grid_sizer->Add(s10);
grid_sizer->Add(s8); grid_sizer->Add(s11);
wxBoxSizer* cont_sizer = new wxBoxSizer(wxVERTICAL);
cont_sizer->Add(grid_sizer, 1, wxEXPAND | wxALL, 5);
SetSizer(cont_sizer);
GetSizer()->SetSizeHints(this);
UpdateColors();
}
private:
wxBitmap CreateColorBitmap(const wxColour& c)
{
wxImage image;
image.Create(25,14);
for (int x = 0; x < 25; ++x)
for (int y = 0; y < 14; ++y)
{
wxColour pixcol = c;
if (x == 0 || x == 24 || y == 0 || y == 13)
pixcol = *wxBLACK;
image.SetRGB(x, y, pixcol.Red(), pixcol.Green(), pixcol.Blue());
}
return wxBitmap(image);
}
void UpdateColors()
{
wxColour bk = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_BACKGROUND_COLOUR);
m_background_color->SetBitmapLabel(CreateColorBitmap(bk));
wxColour cap = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR);
m_inactive_caption_color->SetBitmapLabel(CreateColorBitmap(cap));
wxColour capgrad = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR);
m_inactive_caption_gradient_color->SetBitmapLabel(CreateColorBitmap(capgrad));
wxColour captxt = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR);
m_inactive_caption_text_color->SetBitmapLabel(CreateColorBitmap(captxt));
wxColour acap = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR);
m_active_caption_color->SetBitmapLabel(CreateColorBitmap(acap));
wxColour acapgrad = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR);
m_active_caption_gradient_color->SetBitmapLabel(CreateColorBitmap(acapgrad));
wxColour acaptxt = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR);
m_active_caption_text_color->SetBitmapLabel(CreateColorBitmap(acaptxt));
wxColour sash = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_SASH_COLOUR);
m_sash_color->SetBitmapLabel(CreateColorBitmap(sash));
wxColour border = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_BORDER_COLOUR);
m_border_color->SetBitmapLabel(CreateColorBitmap(border));
wxColour gripper = m_frame->GetDockArt()->GetColor(wxAUI_DOCKART_GRIPPER_COLOUR);
m_gripper_color->SetBitmapLabel(CreateColorBitmap(gripper));
}
void OnPaneBorderSize(wxSpinEvent& event)
{
m_frame->GetDockArt()->SetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE,
event.GetPosition());
m_frame->DoUpdate();
}
void OnSashSize(wxSpinEvent& event)
{
m_frame->GetDockArt()->SetMetric(wxAUI_DOCKART_SASH_SIZE,
event.GetPosition());
m_frame->DoUpdate();
}
void OnCaptionSize(wxSpinEvent& event)
{
m_frame->GetDockArt()->SetMetric(wxAUI_DOCKART_CAPTION_SIZE,
event.GetPosition());
m_frame->DoUpdate();
}
void OnSetColor(wxCommandEvent& event)
{
wxColourDialog dlg(m_frame);
dlg.SetTitle(_("Color Picker"));
if (dlg.ShowModal() != wxID_OK)
return;
int var = 0;
switch (event.GetId())
{
case ID_BackgroundColor: var = wxAUI_DOCKART_BACKGROUND_COLOUR; break;
case ID_SashColor: var = wxAUI_DOCKART_SASH_COLOUR; break;
case ID_InactiveCaptionColor: var = wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR; break;
case ID_InactiveCaptionGradientColor: var = wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR; break;
case ID_InactiveCaptionTextColor: var = wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR; break;
case ID_ActiveCaptionColor: var = wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR; break;
case ID_ActiveCaptionGradientColor: var = wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR; break;
case ID_ActiveCaptionTextColor: var = wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR; break;
case ID_BorderColor: var = wxAUI_DOCKART_BORDER_COLOUR; break;
case ID_GripperColor: var = wxAUI_DOCKART_GRIPPER_COLOUR; break;
default: return;
}
m_frame->GetDockArt()->SetColor(var, dlg.GetColourData().GetColour());
m_frame->DoUpdate();
UpdateColors();
}
private:
MyFrame* m_frame;
wxSpinCtrl* m_border_size;
wxSpinCtrl* m_sash_size;
wxSpinCtrl* m_caption_size;
wxBitmapButton* m_inactive_caption_text_color;
wxBitmapButton* m_inactive_caption_gradient_color;
wxBitmapButton* m_inactive_caption_color;
wxBitmapButton* m_active_caption_text_color;
wxBitmapButton* m_active_caption_gradient_color;
wxBitmapButton* m_active_caption_color;
wxBitmapButton* m_sash_color;
wxBitmapButton* m_background_color;
wxBitmapButton* m_border_color;
wxBitmapButton* m_gripper_color;
DECLARE_EVENT_TABLE()
};
二、资源文件
pro_icon ICON "res//pro_icon.ico"
#include <wx/msw/wx.rc>
icon1 ICON "bitmaps/toolbrai.ico"
icon2 ICON "bitmaps/toolchar.ico"
icon3 ICON "bitmaps/toolchec.ico"
icon4 ICON "bitmaps/tooldata.ico"
icon5 ICON "bitmaps/toolgame.ico"
icon6 ICON "bitmaps/toolnote.ico"
icon7 ICON "bitmaps/tooltime.ico"
icon8 ICON "bitmaps/tooltodo.ico"
icon9 ICON "bitmaps/toolword.ico"
iconsmall ICON "bitmaps/small1.ico"
三、界面实现部分
///
// Name: UI.cpp
// Purpose: 文件打包管理器布局
// Author: 陈相礼
// Modified by:
// Created: 2009-7-29
// RCS-ID:
// Copyright: (C) Copyright 2009, TSong Corporation, All Rights Reserved.
// Licence:
///
#include "wx/wxprec.h"
#include "wx/app.h"
#include "wx/grid.h"
#include "wx/treectrl.h"
#include "wx/spinctrl.h"
#include "wx/artprov.h"
#include "wx/clipbrd.h"
#include "wx/image.h"
#include "wx/colordlg.h"
#include "wx/wxhtml.h"
#include "wx/imaglist.h"
#include "wx/dataobj.h"
#include "wx/dcclient.h"
#include "wx/bmpbuttn.h"
#include "wx/menu.h"
#include "wx/toolbar.h"
#include "wx/statusbr.h"
#include "wx/msgdlg.h"
#include "wx/textdlg.h"
#include "wx/filefn.h"
#include "wx/dir.h"
#include "wx/arrstr.h"
#include "wx/filename.h"
#include "wx/listctrl.h"
#include "wx/srchctrl.h"
#include "wx/aui/aui.h"
#include "wx/filedlg.h"
#include "UI.h"
//
// SettingsPanel类事件映射表
BEGIN_EVENT_TABLE(SettingsPanel, wxPanel)
EVT_SPINCTRL(ID_PaneBorderSize, SettingsPanel::OnPaneBorderSize)
EVT_SPINCTRL(ID_SashSize, SettingsPanel::OnSashSize)
EVT_SPINCTRL(ID_CaptionSize, SettingsPanel::OnCaptionSize)
EVT_BUTTON(ID_BackgroundColor, SettingsPanel::OnSetColor)
EVT_BUTTON(ID_SashColor, SettingsPanel::OnSetColor)
EVT_BUTTON(ID_InactiveCaptionColor, SettingsPanel::OnSetColor)
EVT_BUTTON(ID_InactiveCaptionGradientColor, SettingsPanel::OnSetColor)
EVT_BUTTON(ID_InactiveCaptionTextColor, SettingsPanel::OnSetColor)
EVT_BUTTON(ID_ActiveCaptionColor, SettingsPanel::OnSetColor)
EVT_BUTTON(ID_ActiveCaptionGradientColor, SettingsPanel::OnSetColor)
EVT_BUTTON(ID_ActiveCaptionTextColor, SettingsPanel::OnSetColor)
EVT_BUTTON(ID_BorderColor, SettingsPanel::OnSetColor)
EVT_BUTTON(ID_GripperColor, SettingsPanel::OnSetColor)
END_EVENT_TABLE()
//
// MyFrame类事件映射表
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_SIZE(MyFrame::OnSize)
EVT_ERASE_BACKGROUND(MyFrame::OnEraseBackground)
EVT_MENU(MENU_ID_SETTING, MyFrame::OnSettings)
EVT_MENU(MENU_ID_TEST, MyFrame::OnHide)
EVT_MENU(MENU_ID_TOOL, MyFrame::OnShow)
EVT_MENU(MENU_ID_PREVIEW, MyFrame::OnShow)
EVT_MENU(MENU_ID_OPEN, MyFrame::OnOpen)
EVT_MENU(MENU_ID_ADDFILE, MyFrame::OnAddFile)
EVT_MENU(MENU_ID_ADDFOLDER, MyFrame::OnAddFolder)
EVT_MENU(MENU_ID_EXIT, MyFrame::OnExit)
EVT_MENU(MENU_ID_ABOUT, MyFrame::OnAbout)
EVT_MENU(ID_CustomizeToolbar, MyFrame::OnCustomizeToolbar)
EVT_MENU_RANGE(MyFrame::MENU_ID_SETDEFAULT, MyFrame::MENU_ID_SETDEFAULT+1000,
MyFrame::OnRestorePerspective)
EVT_AUITOOLBAR_TOOL_DROPDOWN(ID_DropDownToolbarItem, MyFrame::OnDropDownToolbarItem)
EVT_MENU(MENU_ID_BIGICON, MyFrame::OnChangeListStyle)
EVT_MENU(MENU_ID_SMALLICON, MyFrame::OnChangeListStyle)
EVT_MENU(MENU_ID_LISTICON, MyFrame::OnChangeListStyle)
EVT_MENU(MENU_ID_DETAILICON, MyFrame::OnChangeListStyle)
EVT_CONTEXT_MENU(MyFrame::OnContextMenu)
END_EVENT_TABLE()
DECLARE_APP(MyApp)
//
// 程序入口点
IMPLEMENT_APP(MyApp)
// 定义列表框图片个数等
static const int NUM_ITEMS = 30;
static const int NUM_ICONS = 9;
// 程序从这里开始执行
bool MyApp::OnInit()
{
wxFrame* frame = new MyFrame(NULL,
wxID_ANY,
wxT("文件打包管理器 - [V1.0]"),
wxDefaultPosition,
wxSize(800, 600));
SetTopWindow(frame);
frame->Show();
return true;
}
//
// 初始化,对整个UI界面进行布局
MyFrame::MyFrame(wxWindow* parent,
wxWindowID id,
const wxString& title,
const wxPoint& pos,
const wxSize& size,
long style)
: wxFrame(parent, id, title, pos, size, style)
{
// 告诉 wxAuiManager 要管理的框架
m_mgr.SetManagedWindow(this);
// 设置 frame 图标
SetIcon( wxIcon( wxT( "pro_icon" ) ) );
// 设置列表框控件图标列表
m_imageListNormal = new wxImageList(32, 32, true);
m_imageListSmall = new wxImageList(16, 16, true);
m_imageListNormal->Add( wxIcon(_T("icon1"), wxBITMAP_TYPE_ICO_RESOURCE) );
m_imageListNormal->Add( wxIcon(_T("icon2"), wxBITMAP_TYPE_ICO_RESOURCE) );
m_imageListNormal->Add( wxIcon(_T("icon3"), wxBITMAP_TYPE_ICO_RESOURCE) );
m_imageListNormal->Add( wxIcon(_T("icon4"), wxBITMAP_TYPE_ICO_RESOURCE) );
m_imageListNormal->Add( wxIcon(_T("icon5"), wxBITMAP_TYPE_ICO_RESOURCE) );
m_imageListNormal->Add( wxIcon(_T("icon6"), wxBITMAP_TYPE_ICO_RESOURCE) );
m_imageListNormal->Add( wxIcon(_T("icon7"), wxBITMAP_TYPE_ICO_RESOURCE) );
m_imageListNormal->Add( wxIcon(_T("icon8"), wxBITMAP_TYPE_ICO_RESOURCE) );
m_imageListNormal->Add( wxIcon(_T("icon9"), wxBITMAP_TYPE_ICO_RESOURCE) );
m_imageListSmall->Add( wxIcon(_T("pro_icon"), wxBITMAP_TYPE_ICO_RESOURCE) );
// 设定默认 notebook 样式
m_notebook_style = wxAUI_NB_DEFAULT_STYLE | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
// 创建菜单
wxMenuBar* mb = new wxMenuBar;
wxMenu* file_menu = new wxMenu;
file_menu->Append(MENU_ID_NEW, _("新建(&N)/tCtrl+N"));
file_menu->Append(MENU_ID_OPEN, _("打开(&O)/tCtrl+O"));
file_menu->Append(MENU_ID_ROPEN, _("重新打开(&R)"));
file_menu->Append(MENU_ID_CLOSE, _("关闭(&C)"));
file_menu->Append(MENU_ID_HISTORY, _("历史记录(&H)"));
file_menu->AppendSeparator();
file_menu->Append(MENU_ID_INFO, _("信息(&I)"));
file_menu->AppendSeparator();
file_menu->Append(MENU_ID_EXIT, _("退出(&X)/tAlt+Q"));
wxMenu* view_menu = new wxMenu;
view_menu->AppendCheckItem(MENU_ID_TOOL, _("工具栏(&T)"));
view_menu->AppendCheckItem(MENU_ID_PREVIEW, _("预览(&P)"));
view_menu->AppendSeparator();
view_menu->AppendRadioItem(MENU_ID_BIGICON, _("大图标(&G)"));
view_menu->AppendRadioItem(MENU_ID_SMALLICON, _("小图标(&M)"));
view_menu->AppendRadioItem(MENU_ID_LISTICON, _("列表(&L)"));
view_menu->AppendRadioItem(MENU_ID_DETAILICON, _("详细资料(&D)"));
wxMenu* operate_menu = new wxMenu;
operate_menu->Append(MENU_ID_OPENFILE, _("打开(&O)"));
operate_menu->Append(MENU_ID_OPENMODE, _("打开方式...(&W)"));
operate_menu->AppendSeparator();
operate_menu->Append(MENU_ID_UNZIP, _("解压缩(&E)/tCtrl+E"));
operate_menu->Append(MENU_ID_RENAME, _("重命名(&R)/tF2"));
operate_menu->Append(MENU_ID_DELETE, _("删除(&D)/tDelete"));
operate_menu->AppendSeparator();
operate_menu->Append(MENU_ID_ATTRIBUTE, _("属性(&A)/tAlt+Enter"));
operate_menu->Append(MENU_ID_NEWFOLDER, _("新建文件夹(&N)"));
operate_menu->Append(MENU_ID_ADDFILE, _("添加文件(&A)"));
operate_menu->Append(MENU_ID_ADDFOLDER, _("添加文件夹(&T)"));
operate_menu->AppendSeparator();
operate_menu->Append(MENU_ID_SELECTLISTFILE, _("选择列表文件(&L)"));
operate_menu->Append(MENU_ID_UNZIPALL, _("全部解压(&X)"));
operate_menu->Append(MENU_ID_REZIP, _("重新压缩(&C)"));
wxMenu* options_menu = new wxMenu;
options_menu->Append(MENU_ID_FILETYPEOPTION, _("文件类型选项(&O)/tF6"));
wxMenu* language_menu = new wxMenu;
language_menu->AppendRadioItem(MENU_ID_ENGLISH, _("&English"));
language_menu->AppendRadioItem(MENU_ID_CHINESE, _("&Chinese"));
language_menu->AppendRadioItem(MENU_ID_RUSSIAN, _("&Russian"));
options_menu->Append(MENU_ID_LANGUAGE, _("语言"), language_menu);
options_menu->AppendSeparator();
options_menu->Append(MENU_ID_SETDEFAULT, _("重置界面(&R)"));
options_menu->Append(MENU_ID_SETTING, _("界面设置...(&S)"));
wxMenu* help_menu = new wxMenu;
help_menu->Append(MENU_ID_ABOUT, _("关于...(&A)"));
help_menu->Append(MENU_ID_TEST, _("测试之用...(&T)"));
mb->Append(file_menu, _("文件(&F)"));
mb->Append(view_menu, _("查看(&V)"));
mb->Append(operate_menu, _("操作(&O)"));
mb->Append(options_menu, _("选项(&P)"));
mb->Append(help_menu, _("帮助(&H)"));
SetMenuBar(mb);
// 创建状态栏并加载显示
CreateStatusBar();
GetStatusBar()->SetStatusText(_("就绪..."));
// 设置窗体本身最小大小
SetMinSize(wxSize(400,300));
// 界面上添加Aui元素
wxAuiToolBarItemArray prepend_items;
wxAuiToolBarItemArray append_items;
wxAuiToolBarItem item;
item.SetKind(wxITEM_SEPARATOR);
append_items.Add(item);
item.SetKind(wxITEM_NORMAL);
item.SetId(ID_CustomizeToolbar);
item.SetLabel(_("自定义工具栏..."));
append_items.Add(item);
// 创建aui工具栏
wxAuiToolBar* common_toolbar = new wxAuiToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
wxAUI_TB_DEFAULT_STYLE |
wxAUI_TB_OVERFLOW |
wxAUI_TB_TEXT |
wxAUI_TB_HORZ_TEXT);
common_toolbar->SetToolBitmapSize(wxSize(16,16));
wxBitmap common_toolbar_bmp1 = wxArtProvider::GetBitmap(wxART_NEW, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(ID_DropDownToolbarItem, wxT("新建"), common_toolbar_bmp1);
wxBitmap common_toolbar_bmp2 = wxArtProvider::GetBitmap(wxART_FOLDER_OPEN, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_OPEN, wxT("打开"), common_toolbar_bmp2);
common_toolbar->AddSeparator();
wxBitmap common_toolbar_bmp3 = wxArtProvider::GetBitmap(wxART_INFORMATION, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_INFO, wxT("信息"), common_toolbar_bmp3);
common_toolbar->AddSeparator();
wxBitmap common_toolbar_bmp4 = wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_ABOUT, wxT("?"), common_toolbar_bmp4);
common_toolbar->AddSeparator();
wxBitmap common_toolbar_bmp5 = wxArtProvider::GetBitmap(wxART_MISSING_IMAGE, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_UNZIP, wxT("解压缩"), common_toolbar_bmp5);
wxBitmap common_toolbar_bmp6 = wxArtProvider::GetBitmap(wxART_CROSS_MARK, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_DELETE, wxT("删除"), common_toolbar_bmp6);
common_toolbar->AddSeparator();
wxBitmap common_toolbar_bmp7 = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_ADDFILE, wxT("添加文件"), common_toolbar_bmp7);
wxBitmap common_toolbar_bmp8 = wxArtProvider::GetBitmap(wxART_NEW_DIR, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_ADDFOLDER, wxT("添加文件夹"), common_toolbar_bmp8);
common_toolbar->AddSeparator();
wxBitmap common_toolbar_bmp9 = wxArtProvider::GetBitmap(wxART_REMOVABLE, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_BIGICON, wxT("大图标"), common_toolbar_bmp9);
wxBitmap common_toolbar_bmp10 = wxArtProvider::GetBitmap(wxART_TIP, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_SMALLICON, wxT("小图标"), common_toolbar_bmp10);
wxBitmap common_toolbar_bmp11 = wxArtProvider::GetBitmap(wxART_LIST_VIEW, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_LISTICON, wxT("列表"), common_toolbar_bmp11);
wxBitmap common_toolbar_bmp12 = wxArtProvider::GetBitmap(wxART_REPORT_VIEW, wxART_OTHER, wxSize(16,16));
common_toolbar->AddTool(MENU_ID_DETAILICON, wxT("详细资料"), common_toolbar_bmp12);
common_toolbar->AddSeparator();
common_toolbar->SetToolDropDown(ID_DropDownToolbarItem, true);
common_toolbar->SetCustomOverflowItems(prepend_items, append_items);
common_toolbar->Realize();
//
// 在管理器中添加面板
// 添加左边目录树
m_mgr.AddPane(CreateTreeCtrl( wxT( "成绩表" ), NULL ), wxAuiPaneInfo().
Name(wxT("dir_tree")).Caption(wxT("PKG目录列表")).
Left().Layer(1).Position(1).
CloseButton(false).MaximizeButton(false));
// 添加文件预览框
m_mgr.AddPane(CreateTextCtrl(wxT("")), wxAuiPaneInfo().
Name(wxT("file_content")).Caption(wxT("内容预览...")).
Bottom().Layer(1).Position(1));
// 添加设置对话框
m_mgr.AddPane(new SettingsPanel(this,this), wxAuiPaneInfo().
Name(wxT("settings")).Caption(wxT("界面显示设置")).
Dockable(false).Float().Hide());
// 创建一些中心panes
m_mgr.AddPane(CreateNotebook(), wxAuiPaneInfo().Name(wxT("notebook_content")).
CenterPane().PaneBorder(false));
// 添加常用工具栏到窗体顶部
m_mgr.AddPane(common_toolbar, wxAuiPaneInfo().
Name(wxT("common_toolbar")).Caption(wxT("常用工具栏")).
ToolbarPane().Top().Row(2).
LeftDockable(false).RightDockable(false));
// 添加一个搜索工具条
m_mgr.AddPane(new wxSearchCtrl(this, -1, wxEmptyString, wxDefaultPosition,
wxSize(150, -1), wxTE_PROCESS_ENTER ), wxAuiPaneInfo().
Name(wxT("search_toolbar")).Caption(wxT("查找工具栏")).
ToolbarPane().Top().Row(2).Position(1).
LeftDockable(false).RightDockable(false));
// 选择性的隐藏部分栏目
wxString perspective_all = m_mgr.SavePerspective();
int i, count;
wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes();
// 隐藏所有非工具栏
for (i = 0, count = (int )all_panes.GetCount(); i < count; ++i)
if (!all_panes.Item(i).IsToolbar())
all_panes.Item(i).Hide();
m_mgr.GetPane(wxT("common_toolbar")).Hide();
m_mgr.GetPane(wxT("search_toolbar")).Hide();
// 打开目录树和内容显示
m_mgr.GetPane(wxT("dir_tree")).Show().Left().Layer(0).Row(0).Position(0);
m_mgr.GetPane(wxT("notebook_content")).Show();
wxString perspective_default = m_mgr.SavePerspective();
m_perspectives.Add(perspective_default);
m_perspectives.Add(perspective_all);
// 查看菜单,工具栏和预览标志
flag_tool = true;
flag_preview = true;
// 提交wxAuiManager的所有更新
m_mgr.Update();
}
MyFrame::~MyFrame()
{
m_mgr.UnInit();
delete m_imageListNormal;
delete m_imageListSmall;
}
wxAuiDockArt* MyFrame::GetDockArt()
{
return m_mgr.GetArtProvider();
}
void MyFrame::DoUpdate()
{
m_mgr.Update();
}
void MyFrame::OnEraseBackground(wxEraseEvent& event)
{
event.Skip();
}
void MyFrame::OnSize(wxSizeEvent& event)
{
event.Skip();
}
void MyFrame::OnSettings(wxCommandEvent& WXUNUSED(evt))
{
// 显示浮动的设置面板
wxAuiPaneInfo& floating_pane = m_mgr.GetPane(wxT("settings")).Float().Show();
if (floating_pane.floating_pos == wxDefaultPosition)
floating_pane.FloatingPosition(GetStartPosition());
m_mgr.Update();
}
//
// 添加工具栏自定义对话框
void MyFrame::OnCustomizeToolbar(wxCommandEvent& WXUNUSED(evt))
{
wxMessageBox(_("此处处理自定义工具栏事件."));
}
//
// 查看,显示工具栏或者预览编辑框
void MyFrame::OnShow(wxCommandEvent& evt)
{
wxString perspective_all = m_mgr.SavePerspective();
wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes();
switch (evt.GetId())
{
case MENU_ID_TOOL:
if (flag_tool)
{
m_mgr.GetPane(wxT("common_toolbar")).Show();
m_mgr.GetPane(wxT("search_toolbar")).Show();
flag_tool = false;
}
else
{
m_mgr.GetPane(wxT("common_toolbar")).Hide();
m_mgr.GetPane(wxT("search_toolbar")).Hide();
flag_tool = true;
}
break;
case MENU_ID_PREVIEW:
if (flag_preview)
{
m_mgr.GetPane(wxT("file_content")).Show();
flag_preview = false;
}
else
{
m_mgr.GetPane(wxT("file_content")).Hide();
flag_preview = true;
}
break;
}
wxString perspective_default = m_mgr.SavePerspective();
m_perspectives.Add(perspective_default);
m_perspectives.Add(perspective_all);
// 提交wxAuiManager的所有更新
m_mgr.Update();
}
//
// 隐藏所有栏目,测试用
void MyFrame::OnHide(wxCommandEvent& evt)
{
wxString perspective_all = m_mgr.SavePerspective();
int i, count;
wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes();
for (i = 0, count = (int )all_panes.GetCount(); i < count; ++i)
all_panes.Item(i).Hide();
wxString perspective_default = m_mgr.SavePerspective();
m_perspectives.Add(perspective_default);
m_perspectives.Add(perspective_all);
// 提交wxAuiManager的所有更新
m_mgr.Update();
}
//
// 重置界面
void MyFrame::OnRestorePerspective(wxCommandEvent& evt)
{
m_mgr.LoadPerspective(m_perspectives.Item(evt.GetId() - MENU_ID_SETDEFAULT));
}
wxPoint MyFrame::GetStartPosition()
{
static int x = 0;
x += 20;
wxPoint pt = ClientToScreen(wxPoint(0,0));
return wxPoint(pt.x + x, pt.y + x);
}
//
// 下拉式工具栏
void MyFrame::OnDropDownToolbarItem(wxAuiToolBarEvent& evt)
{
if (evt.IsDropDownClicked())
{
wxAuiToolBar* tb = static_cast<wxAuiToolBar*>(evt.GetEventObject());
tb->SetToolSticky(evt.GetId(), true);
// 创建工具栏下拉菜单
wxMenu menuPopup;
wxBitmap bmp1 = wxArtProvider::GetBitmap(wxART_ADD_BOOKMARK, wxART_OTHER, wxSize(16,16));
wxMenuItem* m1 = new wxMenuItem(&menuPopup, 101, _("PKG文件"));
m1->SetBitmap(bmp1);
menuPopup.Append(m1);
wxBitmap bmp2 = wxArtProvider::GetBitmap(wxART_NEW_DIR, wxART_OTHER, wxSize(16,16));
wxMenuItem* m2 = new wxMenuItem(&menuPopup, 101, _("文件夹"));
m2->SetBitmap(bmp2);
menuPopup.Append(m2);
wxBitmap bmp3 = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16));
wxMenuItem* m3 = new wxMenuItem(&menuPopup, 101, _("文件"));
m3->SetBitmap(bmp3);
menuPopup.Append(m3);
wxBitmap bmp4 = wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(16,16));
wxMenuItem* m4 = new wxMenuItem(&menuPopup, 101, _("其他"));
m4->SetBitmap(bmp4);
menuPopup.Append(m4);
// 将菜单同按钮连在一起
wxRect rect = tb->GetToolRect(evt.GetId());
wxPoint pt = tb->ClientToScreen(rect.GetBottomLeft());
pt = ScreenToClient(pt);
PopupMenu(&menuPopup, pt);
// 确保按钮是不可动的
tb->SetToolSticky(evt.GetId(), false);
}
}
//
// 程序退出
void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event))
{
Close(true);
}
//
// 关于
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox(_("文件打包管理器/n对PKG资源包进行综合管理./n(c) Copyright 2009-2010, R.L Studio"), _("关于本程序"), wxOK, this);
}
//
// 创建文件内容显示文本框
wxTextCtrl* MyFrame::CreateTextCtrl(const wxString& ctrl_text)
{
static int n = 0;
wxString text;
if (ctrl_text.Length() > 0)
text = ctrl_text;
else
text.Printf(wxT("没有文件显示..."), ++n);
return new wxTextCtrl(this,wxID_ANY, text,
wxPoint(0,0), wxSize(150,90),
wxNO_BORDER | wxTE_MULTILINE);
}
//
// 创建树形目录控件
wxTreeCtrl* MyFrame::CreateTreeCtrl( wxString StrPath, wxTreeItemId faItem )
{
tree = new wxTreeCtrl(this, wxID_ANY,
wxPoint(0,0), wxSize(160,250),
wxTR_DEFAULT_STYLE | wxNO_BORDER);
wxImageList* imglist = new wxImageList(16, 16, true, 2);
imglist->Add(wxArtProvider::GetBitmap(wxART_FOLDER, wxART_OTHER, wxSize(16,16)));
imglist->Add(wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16)));
tree->AssignImageList(imglist);
wxTreeItemId root = tree->AddRoot(wxT("成绩表"), 0);// 添加根节点
wxDir OneFile( wxT( "./成绩表" ) );
wxString FName, DirName;
bool BeWorking;
wxTreeItemId NewItem;
DirName = StrPath + wxT( "//*.*" );
if ( !OneFile.IsOpened() )
{
// return;
}
wxString filename;
wxFileName *ffilename;
BeWorking = OneFile.GetFirst( &filename );
while ( BeWorking )
{
wxString fullname = OneFile.GetName() + wxT( "//" ) + filename;
ffilename = new wxFileName( fullname, wxEmptyString );
if ( ffilename->IsDir() )
{
NewItem = tree->AppendItem(root, filename, 0);
}
BeWorking = OneFile.GetNext(&filename);
}
tree->Expand(root);
return tree;
}
//
// 创建文件目录列表框
wxListCtrl* MyFrame::CreateListCtrl( wxWindow* parent, long style )
{
if (!parent)
parent = this;
switch ( style )
{
case wxLC_ICON:
m_listCtrl = new wxListCtrl(parent, wxID_ANY,
wxDefaultPosition,
wxSize(400,300), wxLC_ICON);
m_listCtrl->SetImageList(m_imageListNormal, wxIMAGE_LIST_NORMAL);
m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
for ( int i = 0; i < NUM_ICONS; i++ )
{
int image = false ? 0 : i;
m_listCtrl->InsertItem(i, wxString::Format(_T("文件 %d"), i), image);
}
break;
case wxLC_SMALL_ICON:
m_listCtrl = new wxListCtrl(parent, wxID_ANY,
wxDefaultPosition,
wxSize(400,300),wxLC_SMALL_ICON);
m_listCtrl->SetImageList(m_imageListNormal, wxIMAGE_LIST_NORMAL);
m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
for ( int i = 0; i < NUM_ICONS; i++ )
{
int image = true ? 0 : i;
m_listCtrl->InsertItem(i, wxString::Format(_T("文件 %d"), i),image);
}
break;
case wxLC_LIST:
m_listCtrl = new wxListCtrl(parent, wxID_ANY,
wxDefaultPosition,
wxSize(400,300),wxLC_LIST);
m_listCtrl->SetImageList(m_imageListNormal, wxIMAGE_LIST_NORMAL);
m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
for ( int i = 0; i < NUM_ITEMS; i++ )
{
int image = true ? 0 : i;
m_listCtrl->InsertItem(i, wxString::Format(_T("文件 %d"), i),image);
}
break;
case wxLC_REPORT:
m_listCtrl = new wxListCtrl(parent, wxID_ANY,
wxDefaultPosition,
wxSize(400,300),wxLC_REPORT);
m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
wxListItem itemCol;
itemCol.SetText(_T("文件名"));
itemCol.SetImage(-1);
m_listCtrl->InsertColumn(0, itemCol);
itemCol.SetText(_T("文件大小"));
itemCol.SetAlign(wxLIST_FORMAT_CENTRE);
m_listCtrl->InsertColumn(1, itemCol);
itemCol.SetText(_T("属性"));
itemCol.SetAlign(wxLIST_FORMAT_RIGHT);
m_listCtrl->InsertColumn(2, itemCol);
// 临时隐藏,加快速度
m_listCtrl->Hide();
for ( int i = 0; i < NUM_ITEMS; i++ )
{
wxString buf;
buf.Printf(_T("这是第 %d 项"), i);
long tmp = m_listCtrl->InsertItem(i, buf, 0);
m_listCtrl->SetItemData(tmp, i);
buf.Printf(_T("第 1 列, 第 %d 项"), i);
m_listCtrl->SetItem(tmp, 1, buf);
buf.Printf(_T("第 2 列, 第 %d 项"), i);
m_listCtrl->SetItem(tmp, 2, buf);
}
m_listCtrl->SetColumnWidth( 0, wxLIST_AUTOSIZE );
m_listCtrl->SetColumnWidth( 1, wxLIST_AUTOSIZE );
m_listCtrl->SetColumnWidth( 2, wxLIST_AUTOSIZE );
m_listCtrl->Show();
break;
//default:
// break;
}
return m_listCtrl;
}
//
// 创建AuiNotebook面板,用以加载wxListCtrl
wxAuiNotebook* MyFrame::CreateNotebook()
{
wxSize client_size = GetClientSize();
ctrl = new wxAuiNotebook(this, wxID_ANY,
wxPoint(client_size.x, client_size.y),
wxSize(430,200),
m_notebook_style & wxAUI_NB_CLOSE_BUTTON );
wxBitmap page_bmp = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16));
ctrl->AddPage(CreateListCtrl(ctrl,wxLC_SMALL_ICON), wxT("PKG目录文件列表") , false, page_bmp);
return ctrl;
}
//
// 控制列表框显示样式改变
void MyFrame::OnChangeListStyle(wxCommandEvent& evt)
{
wxSize client_size = GetClientSize();
delete ctrl;
ctrl = new wxAuiNotebook(this, wxID_ANY,
wxPoint(client_size.x, client_size.y),
wxSize(430,200),
m_notebook_style & wxAUI_NB_CLOSE_BUTTON );
wxBitmap page_bmp = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16));
switch (evt.GetId())
{
case MENU_ID_BIGICON:
ctrl->AddPage(CreateListCtrl(ctrl, wxLC_ICON), wxT("PKG目录文件列表") , false, page_bmp);
break;
case MENU_ID_SMALLICON:
ctrl->AddPage(CreateListCtrl(ctrl, wxLC_SMALL_ICON), wxT("PKG目录文件列表") , false, page_bmp);
break;
case MENU_ID_LISTICON:
ctrl->AddPage(CreateListCtrl(ctrl, wxLC_LIST), wxT("PKG目录文件列表") , false, page_bmp);
break;
case MENU_ID_DETAILICON:
ctrl->AddPage(CreateListCtrl(ctrl, wxLC_REPORT), wxT("PKG目录文件列表") , false, page_bmp);
break;
default:
break;
}
m_mgr.AddPane(ctrl, wxAuiPaneInfo().Name(wxT("notebook1_content")).CenterPane().PaneBorder(false));
m_mgr.GetPane(wxT("notebook1_content")).Show();
}
//
// 窗体上显示右键菜单
void MyFrame::OnContextMenu(wxContextMenuEvent& event)
{
wxPoint point = event.GetPosition();
// If from keyboard
if (point.x == -1 && point.y == -1) {
wxSize size = GetSize();
point.x = size.x / 2;
point.y = size.y / 2;
} else {
point = ScreenToClient(point);
}
ShowContextMenu(point);
}
//
// 计算右键菜单显示坐标位置
void MyFrame::ShowContextMenu(const wxPoint& pos)
{
wxMenu menu;
menu.Append(MENU_ID_ABOUT, _T("&About"));
menu.AppendSeparator();
menu.Append(MENU_ID_EXIT, _T("E&xit"));
PopupMenu(&menu, pos.x, pos.y);
}
//
// 打开文件
void MyFrame::OnOpen(wxCommandEvent& evt)
{
wxString caption = wxT( "打开PKG文件" );
wxString wildcard = wxT( "PKG 文件(*.pkg)|*.pkg|所有文件(*.*)|*.*" );
wxString defaultDir = wxT("./");
wxString defaultFilename = wxEmptyString;
wxFileDialog dialog( this, caption, defaultDir, defaultFilename, wildcard, wxOPEN | wxFD_FILE_MUST_EXIST);
if ( dialog.ShowModal() == wxID_OK )
{
wxString path = dialog.GetPath();
wxMessageBox(path);
int filterIndex = dialog.GetFilterIndex();
}
}
//
// 添加文件,可以多选添加所有文件
void MyFrame::OnAddFile(wxCommandEvent& evt)
{
wxString caption = wxT( "添加文件" );
wxString wildcard = wxT( "所有文件(*.*)|*.*" );
wxString defaultDir = wxT("./");
wxString defaultFilename = wxEmptyString;
wxFileDialog dialog( this, caption, defaultDir, defaultFilename, wildcard, wxOPEN | wxMULTIPLE | wxFD_FILE_MUST_EXIST);
if ( dialog.ShowModal() == wxID_OK )
{
wxArrayString paths;
dialog.GetPaths(paths);
size_t count = paths.GetCount();
for ( int i = 0; i < (int )count ; i++ )
{
wxMessageBox(paths.Item( i ));
}
int filterIndex = dialog.GetFilterIndex();
}
}
//
// 通过选择文件夹递归的向pkg文件中添加文件
void MyFrame::OnAddFolder(wxCommandEvent& evt)
{
wxString defaultPath = wxT("./");
wxDirDialog dialog( this, wxT("请在下面选择或者输入您要添加文件夹:"), defaultPath, wxDD_DIR_MUST_EXIST);
if ( dialog.ShowModal() == wxID_OK )
{
wxString path = dialog.GetPath();
wxMessageBox(path);
}
}
四、效果图