📄 ttoolbar.tex
字号:
\section{Toolbar overview}\label{wxtoolbaroverview}Classes: \helpref{wxToolBar}{wxtoolbar}The toolbar family of classes allows an application to use toolbarsin a variety of configurations and styles.The toolbar is a popular user interface component and contains a set of bitmapbuttons or toggles. A toolbar gives faster access to an application's facilities thanmenus, which have to be popped up and selected rather laboriously.Instead of supplying one toolbar class with a numberof different implementations depending on platform, wxWidgets separatesout the classes. This is because there are a number of different toolbarstyles that you may wish to use simultaneously, and also, futuretoolbar implementations will emerge whichcannot all be shoe-horned into the one class.For each platform, the symbol {\bf wxToolBar} is defined to be one of thespecific toolbar classes.The following is a summary of the toolbar classes and their differences.\begin{itemize}\itemsep=0pt\item {\bf wxToolBarBase.} This is a base class with pure virtual functions,and should not be used directly.\item {\bf wxToolBarSimple.} A simple toolbar class written entirely with generic wxWidgetsfunctionality. A simple 3D effect for buttons is possible, but it is not consistentwith the Windows look and feel. This toolbar can scroll, and you can have arbitrarynumbers of rows and columns.\item {\bf wxToolBarMSW.} This class implements an old-style Windows toolbar, only onWindows. There are small, three-dimensional buttons, which do not (currently) reflectthe current Windows colour settings: the buttons are grey. This is the default wxToolBaron 16-bit windows.\item {\bf wxToolBar95.} Uses the native Windows 95 toolbar class. It dynamically adjusts itsbackground and button colours according to user colour settings.CreateTools must be called after the tools have been added.No absolute positioning is supported but you can specify the numberof rows, and add tool separators with {\bf AddSeparator}.Tooltips are supported. {\bf OnRightClick} is not supported. This is the default wxToolBaron Windows 95, Windows NT 4 and above. With the style wxTB\_FLAT, the flat toolbarlook is used, with a border that is highlighted when the cursor moves over the buttons.\end{itemize}A toolbar might appear as a single row of images underthe menubar, or it might be in a separate frame layout in several rowsand columns. The class handles the layout of the images, unless explicitpositioning is requested.A tool is a bitmap which can either be a button (there is no `state',it just generates an event when clicked) or it can be a toggle. If atoggle, a second bitmap can be provided to depict the `on' state; ifthe second bitmap is omitted, either the inverse of the first bitmapwill be used (for monochrome displays) or a thick border is drawnaround the bitmap (for colour displays where inverting will not havethe desired result).The Windows-specific toolbar classes expect 16-colour bitmaps that are 16 pixels wide and 15 pixelshigh. If you want to use a different size, call {\bf SetToolBitmapSize}\rtfspas the demo shows, before adding tools to the button bar. Don't supply more thanone bitmap for each tool, because the toolbar generates all three images (normal,depressed and checked) from the single bitmap you give it.\subsection{Using the toolbar library}\label{usingtoolbarlibrary}Include {\tt "wx/toolbar.h"}, or if using a class directly, one of:\begin{itemize}\itemsep=0pt\item {\tt "wx/msw/tbarmsw.h} for wxToolBarMSW\item {\tt "wx/msw/tbar95.h} for wxToolBar95\item {\tt "wx/tbarsmpl.h} for wxToolBarSimple\end{itemize}Example of toolbar use are given in the sample program ``toolbar''. Thesource is given below. In fact it is out of date because recommendedpractise is to use event handlers (using EVT\_MENU or EVT\_TOOL) instead ofoverriding OnLeftClick.{\small\begin{verbatim}/////////////////////////////////////////////////////////////////////////////// Name: test.cpp// Purpose: wxToolBar sample// Author: Julian Smart// Modified by:// Created: 04/01/98// RCS-ID: $Id: ttoolbar.tex,v 1.11 2005/02/22 15:09:55 ABX Exp $// Copyright: (c) Julian Smart// License: wxWindows license/////////////////////////////////////////////////////////////////////////////// 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"#endif#include "wx/toolbar.h"#include <wx/log.h>#include "test.h"#if defined(__WXGTK__) || defined(__WXMOTIF__)#include "mondrian.xpm"#include "bitmaps/new.xpm"#include "bitmaps/open.xpm"#include "bitmaps/save.xpm"#include "bitmaps/copy.xpm"#include "bitmaps/cut.xpm"#include "bitmaps/print.xpm"#include "bitmaps/preview.xpm"#include "bitmaps/help.xpm"#endifIMPLEMENT_APP(MyApp)// The `main program' equivalent, creating the windows and returning the// main framebool MyApp::OnInit(void){ // Create the main frame window MyFrame* frame = new MyFrame((wxFrame *) NULL, -1, (const wxString) "wxToolBar Sample", wxPoint(100, 100), wxSize(450, 300)); // Give it a status line frame->CreateStatusBar(); // Give it an icon frame->SetIcon(wxICON(mondrian)); // Make a menubar wxMenu *fileMenu = new wxMenu; fileMenu->Append(wxID_EXIT, "E&xit", "Quit toolbar sample" ); wxMenu *helpMenu = new wxMenu; helpMenu->Append(wxID_HELP, "&About", "About toolbar sample"); wxMenuBar* menuBar = new wxMenuBar; menuBar->Append(fileMenu, "&File"); menuBar->Append(helpMenu, "&Help"); // Associate the menu bar with the frame frame->SetMenuBar(menuBar); // Create the toolbar frame->CreateToolBar(wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT, ID_TOOLBAR); frame->GetToolBar()->SetMargins( 2, 2 ); InitToolbar(frame->GetToolBar()); // Force a resize. This should probably be replaced by a call to a wxFrame // function that lays out default decorations and the remaining content window. wxSizeEvent event(wxSize(-1, -1), frame->GetId()); frame->OnSize(event); frame->Show(true); frame->SetStatusText("Hello, wxWidgets"); SetTopWindow(frame); return true;}bool MyApp::InitToolbar(wxToolBar* toolBar){ // Set up toolbar wxBitmap* toolBarBitmaps[8];#ifdef __WXMSW__ toolBarBitmaps[0] = new wxBitmap("icon1"); toolBarBitmaps[1] = new wxBitmap("icon2"); toolBarBitmaps[2] = new wxBitmap("icon3"); toolBarBitmaps[3] = new wxBitmap("icon4"); toolBarBitmaps[4] = new wxBitmap("icon5"); toolBarBitmaps[5] = new wxBitmap("icon6"); toolBarBitmaps[6] = new wxBitmap("icon7"); toolBarBitmaps[7] = new wxBitmap("icon8");#else toolBarBitmaps[0] = new wxBitmap( new_xpm ); toolBarBitmaps[1] = new wxBitmap( open_xpm ); toolBarBitmaps[2] = new wxBitmap( save_xpm ); toolBarBitmaps[3] = new wxBitmap( copy_xpm ); toolBarBitmaps[4] = new wxBitmap( cut_xpm ); toolBarBitmaps[5] = new wxBitmap( preview_xpm ); toolBarBitmaps[6] = new wxBitmap( print_xpm ); toolBarBitmaps[7] = new wxBitmap( help_xpm );#endif#ifdef __WXMSW__ int width = 24;#else int width = 16;#endif int currentX = 5; toolBar->AddTool(wxID_NEW, *(toolBarBitmaps[0]), wxNullBitmap, false, currentX, -1, (wxObject *) NULL, "New file"); currentX += width + 5; toolBar->AddTool(wxID_OPEN, *(toolBarBitmaps[1]), wxNullBitmap, false, currentX, -1, (wxObject *) NULL, "Open file"); currentX += width + 5; toolBar->AddTool(wxID_SAVE, *(toolBarBitmaps[2]), wxNullBitmap, false, currentX, -1, (wxObject *) NULL, "Save file"); currentX += width + 5; toolBar->AddSeparator(); toolBar->AddTool(wxID_COPY, *(toolBarBitmaps[3]), wxNullBitmap, false, currentX, -1, (wxObject *) NULL, "Copy"); currentX += width + 5; toolBar->AddTool(wxID_CUT, *(toolBarBitmaps[4]), wxNullBitmap, false, currentX, -1, (wxObject *) NULL, "Cut"); currentX += width + 5; toolBar->AddTool(wxID_PASTE, *(toolBarBitmaps[5]), wxNullBitmap, false, currentX, -1, (wxObject *) NULL, "Paste"); currentX += width + 5; toolBar->AddSeparator(); toolBar->AddTool(wxID_PRINT, *(toolBarBitmaps[6]), wxNullBitmap, false, currentX, -1, (wxObject *) NULL, "Print"); currentX += width + 5; toolBar->AddSeparator(); toolBar->AddTool(wxID_HELP, *(toolBarBitmaps[7]), wxNullBitmap, false, currentX, -1, (wxObject *) NULL, "Help"); toolBar->Realize(); // Can delete the bitmaps since they're reference counted int i; for (i = 0; i < 8; i++) delete toolBarBitmaps[i]; return true;}// wxID_HELP will be processed for the 'About' menu and the toolbar help button.BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(wxID_EXIT, MyFrame::OnQuit) EVT_MENU(wxID_HELP, MyFrame::OnAbout) EVT_CLOSE(MyFrame::OnCloseWindow) EVT_TOOL_RANGE(wxID_OPEN, wxID_PASTE, MyFrame::OnToolLeftClick) EVT_TOOL_ENTER(wxID_OPEN, MyFrame::OnToolEnter)END_EVENT_TABLE()// Define my frame constructorMyFrame::MyFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style): wxFrame(parent, id, title, pos, size, style){ m_textWindow = new wxTextCtrl(this, -1, "", wxPoint(0, 0), wxSize(-1, -1), wxTE_MULTILINE);}void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)){ Close(true);}void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)){ (void)wxMessageBox("wxWidgets toolbar sample", "About wxToolBar");}// Define the behaviour for the frame closing// - must delete all frames except for the main one.void MyFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event)){ Destroy();}void MyFrame::OnToolLeftClick(wxCommandEvent& event){ wxString str; str.Printf("Clicked on tool %d", event.GetId()); SetStatusText(str);}void MyFrame::OnToolEnter(wxCommandEvent& event){ if (event.GetSelection() > -1) { wxString str; str.Printf("This is tool number %d", event.GetSelection()); SetStatusText(str); } else SetStatusText("");}\end{verbatim}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -