wxWindows提供了下列通用对话框。
* wxFileDialog 一个存储或打开文件的对话框。
* wxColourDialog 一个选择颜色的对话框。
* wxFontDialog 选择字体的对话框。
* wxPrintDialog 用于打印与设置打印机的对话框。
* wxDirDialog 选择目录的对话框。
* wxTextEntryDialog 请求用户输入一行文本的对话框。
* wxMessageDialog 用于显示一行或多行信息,可包括OK,Yes,No,与Cancel按钮。
* wxSingleChoiceDialog 显示一个包含字符串列表的对话框,并且允许用户选择其中一个。
wxFileDialog 为用户提供一个当用户在打开或者储存一个文件时可以选择或者输入文件名的对话框。一个全局方法wxFileSelector同样可以用来让用户选择一个文件。详情请看章节 “wxFileSelector”. 构造函数
#include
wxFileDialog(wxWindow* parent,
const wxString& message= "Choose a file",
const wxString& defaultDir= "",
const wxString& defaultFile= "",
const wxString& wildcard= "",
long style= 0,
const wxPoint& pos= wxDefaultPosition);
* parent 拥有这个对话框的窗口。
* message 对话框的标题。
* defaultDir 默认目录。
* defaultFile 默认文件名。
* wildcard 是一些类似 "*.*" or "*.txt"之类的字符串。这是用来过滤文件的。它的语法为 描述|后缀。例 "All files(*.*)|*.*|Text files(*.txt)|*.txt|Bitmap files(*.bmp)|*.bmp".
* style 对话框的类型。
表 4.1. wxFileDialog 风格
public void SetDirectory(const wxString& dir);
public wxString GetDirectory();
public void SetFilename(const wxString& name);
public wxString GetFilename();
public const void GetFilenames(wxArrayString& files);
public void SetFilterIndex(int filterIndex);
public int GetFilterIndex();
public void SetMessage(const wxString& message);
public wxString GetMessage();
public void SetPath(const wxString& path);
public wxString GetPath();
public void SetStyle(long style);
public long GetStyle();
public void GetPaths(wxArrayString& paths);
public void SetWildcard(const wxString& wildCard); public wxString GetWildcard();
public int ShowModal();
显示对话框,当用户按下OK时返回wxID_OK。其它情况返回wxID_CANCEL。例
在第二章的文本编辑器例子中,使用ShowModal来显示一个对话框。”Modal”表示在对话框关闭之前程序的其它窗口不能得到焦点。使用ShowModal 显示对话框时,当用户按下OK时返回wxID_OK。其它情况返回wxID_CANCEL。 GetFilename 是用来得到选择的文件的文件名。GetPath 将返回所选择文件的完整路径(目录与文件名)。在使用wxTextCtrl控件时加载与保存文件是非常简单的。方法 LoadFile 和 SaveFile分别用于加载与保存文件。
void TextFrame::OnMenuFileOpen(wxCommandEvent &event)
{
wxFileDialog *dlg = new wxFileDialog(this, "Open a text file", "", "",
"All files(*.*)|*.*|Text Files(*.txt)|*.txt",
wxOPEN, wxDefaultPosition);
if ( dlg->ShowModal() == wxID_OK )
{
m_pTextCtrl->LoadFile(dlg->GetFilename());
SetStatusText(dlg->GetFilename(), 0);
}
dlg->Destroy();
}
void TextFrame::OnMenuFileSave(wxCommandEvent &event)
{
wxFileDialog *dlg = new wxFileDialog(this, "Save a text file", "", "",
"All files(*.*)|*.*|Text Files(*.txt)|*.txt",
wxSAVE, wxDefaultPosition);
if ( dlg->ShowModal() == wxID_OK )
{
m_pTextCtrl->SaveFile(dlg->GetPath());
SetStatusText(dlg->GetFilename(), 0);
}
dlg->Destroy();
}
wxFileSelector 弹出一个文件选择框。当用户忽略它时返回一个空字符串。
wxString wxFileSelector(const wxString& message,
const wxString& defaultPath= "",
const wxString& defaultFile= "",
const wxString& defaultExtension= "",
const wxString& wildcard= "*.*",
int flags= 0,
wxWindow* parent= NULL,
int x= -1,
int y= -1);
例
例4.2. wxFileSelector的使用。
wxString selection = wxFileSelector("Open a Javascript file", "", "", "js",
"All files(*.*)|*.*|JavaScript Files(*.js)|*.js|Text Files(*.txt)|*.txt",
wxOPEN, this);
wxColourDialog实现了一个供用户选择颜色的窗口。WxColourDialog是与wxColourdata共同使用的。WxColourData是用来在对话框中设置当前颜色并用来得到选择的颜色。构造函数
#include
wxColourDialog(wxWindow* parent,
wxColourData* data= NULL);
public wxColourData& GetColourData();
public void SetTitle(const wxString& title);
public wxString GetTitle();
public int ShowModal();
wxColourData
构造函数
wxColourData();
默认构造函数
wxColourData(const wxColourData& data);
拷贝构造函数
public void SetChooseFull(bool flag);
public bool GetChooseFull();
public void SetColour(wxColour& colour);
public wxColour& GetColour();
public void SetCustomColour(int i, wxColour& colour);
public wxColour GetCustomColour(int i);
设置或得到给定位置的自定义颜色。I必须在0与15之间。例
例4.3 为程序添加一个菜单项允许用户选择其它的背景颜色。当前的背景色被赋给colourData。如果程序是运行在windows下的话将显示一个填充对话框。
void TextFrame::OnMenuOptionBackgroundColor(wxCommandEvent &event)
{
wxColourData colourData;
wxColour colour = m_pTextCtrl->GetBackgroundColour();
colourData.SetColour(colour);
colourData.SetChooseFull(true);
wxColourDialog *dlg = new wxColourDialog(this, &colourData);
if ( dlg->ShowModal() == wxID_OK )
{
colourData = dlg->GetColourData();
m_pTextCtrl->SetBackgroundColour(colourData.GetColour());
m_pTextCtrl->Refresh();
}
dlg->Destroy();
}
wxGetColourFromUser 显示颜色选择对话框并返回用户选择的颜色或者在用户取消对话框时返回一个无效的颜色。使用wxColour的OK方法来测试颜色是否有效。
wxColour wxGetColourFromUser(wxWindow* parent= NULL,
const wxColour& colInit= wxNullColour);
例
例4.4. wxGetColourFromUser的使用
wxColour colour = wxGetColourFromUser();
if ( colour.Ok() )
{
// 用户选择的颜色
}
wxFontDialog是供用户选择字体的对话框。这个对话框与wxFontData,wxFont和wxColour 一起使用。WxFontData用于设置对话框内的当前字体并得到选择的字体。构造函数
#include
wxColourDialog(wxWindow* parent,
wxFontData* data= NULL);
方法
public wxFontData& GetFontData();
得到与对话框关联的fontdata的引用。
public int ShowModal();
显示对话框,当用户按下OK时返回wxID_OK。其它情况返回wxID_CANCEL。
wxFontData
wxFontData();
默认构造函数
public void EnableEffects(bool flag);
public bool GetEnableEffects();
在 Windows上, 指出是否使用字体效果比如下划线、斜体等。
public void SetAllowSymbols(bool flag);
public bool GetAllowSymbols();
在 Windows上,指出是否可以选择符号字体。
public void SetColour(const wxColour& colour);
public wxColour & GetColour();
设置或得到字体颜色。
public void SetShowHelp(bool flag);
public bool GetShowHelp();
On 在windows上,指出是否显示”帮助“按钮。
public void SetInitialFont(const wxFont& font);
public wxFont GetInitialFont();
得到或设置对话框使用的原始字体。
public wxFont GetChosenFont();
得到选择的字体。
public void SetRange(int minRange,
int maxRange);
在windows上,指出字体大小最大与最小值。默认情况下为0到无限。例
Example 例4.5 为第二章的文本编辑器实现了一个新的菜单项来改变编辑器内的字体。首先fontdata用当前的字体与颜色填充,当程序在Windows上运行时,用户将看到帮助按钮。当用户选择了字体时,fontdata将被赋与新的字体与文本控件的前景色。
例4.5. wxFontDialog的使用
void TextFrame::OnMenuOptionFont(wxCommandEvent& event)
{
wxFontData fontData;
wxFont font;
wxColour colour;
font = m_pTextCtrl->GetFont();
fontData.SetInitialFont(font);
colour = m_pTextCtrl->GetForegroundColour();
fontData.SetColour(colour);
fontData.SetShowHelp(true);
wxFontDialog *dlg = new wxFontDialog(this, &fontData);
if ( dlg->ShowModal() == wxID_OK )
{
fontData = dlg->GetFontData();
font = fontData.GetChosenFont();
m_pTextCtrl->SetFont(font);
m_pTextCtrl->SetForegroundColour(fontData.GetColour());
m_pTextCtrl->Refresh();
}
dlg->Destroy();
}
TODO. Constructor Methods Example wxDirDialog
wxDirDialog用来选择一个目录构造函数
wxDirDialog(wxWindow* parent,
const wxString& message= "Choose a directory",
const wxString& defaultPath= "",
long style= 0,
const wxPoint& pos= wxDefaultPosition);
方法
public void SetMessage(const wxString& message);
public wxString GetMessage();
得到与设置对话框标题
void SetPath(const wxString& path);
public wxString GetPath();
得到与设置当前路径
public int ShowModal();
显示对话框,当用户按下OK时返回wxID_OK。其它情况返回wxID_CANCEL。例
例 4.6 显示了设置新工作目录的菜单动作的实现。WxGetCwd用来用户得到当前的工作目录。当用户选择一个目录时你可以使用GetPath方法来得到目录名。WxSetWorkingDirectory是用来设置新的工作目录。
例4.6. wxDirDialog的使用。
void TextFrame::OnMenuOptionDirectory(wxCommandEvent& event)
{
wxDirDialog *dlg = new wxDirDialog(this, "Select a new working directory", wxGetCwd());
if ( dlg->ShowModal() == wxID_OK )
{
wxSetWorkingDirectory(dlg->GetPath());
}
dlg->Destroy();
}
wxDirSelector 弹出一个目录选择框。
wxString wxDirSelector(const wxString& message,
const wxString& defaultPath= "",
long style= 0,
const wxPoint& pos= wxDefaultPosition,
wxWindow* parent= NULL);
例
例4.7 要求用户选择一个文件夹。
例 4.7. Using wxDirSelector的使用
wxString selection = wxDirSelector("Select a folder");
if ( ! selection.empty() )
{
// The user selected a folder.
}
wxTextEntryDialog 请求用户输入一行文本的对话框。构造函数
wxTextEntryDialog(wxWindow* parent,
const wxString& message,
const wxString& caption= "Please enter text",
const wxString& defaultValue= "",
long style= wxOK | wxCANCEL | wxCENTRE,
const wxPoint& pos= wxDefaultPosition);
Table表 4.2. wxTextEntryDialog 的风格styles
方法
void SetValue(const wxString& val);
public wxString GetValue();
得到与设置文本区域的值。Get/Set the value of the text field.
public int ShowModal();
显示对话框,当用户按下OK时返回wxID_OK。其它情况返回wxID_CANCEL。例
例 4.8 显示一个对话框提示用户输入一个密码。
例 4.8. wxTextEntryDialog的使用
wxTextEntryDialog *dlg = new wxTextEntryDialog(this, "Enter your password", "Enter your password", "", wxOK | wxCANCEL | wxCENTRE | wxTE_PASSWORD);
if ( dlg->ShowModal() == wxID_OK )
{
// Check the password
}
else
{
// Stop the application
}
dlg->Destroy();
wxGetTextFromUser 弹出一个允许用户输入一些文本的对话框。
wxString wxGetTextFromUser(const wxString& message,
const wxString& caption= "Input text",
const wxString& defaultValue= "",
wxWindow* parent= NULL,
int x= -1,
int y= -1,
bool centre= true);
例
例4.9 要求用户输入一些文本。a
例4.9. wxGetTextFromUser的使用
wxString text = wxGetTextFromUser("Please, enter some text");
wxGetPasswordFromUser 弹出一个输入密码的对话框。
wxString wxGetPasswordFromUser(const wxString& message,
const wxString& caption= "Input text",
const wxString& defaultValue= "",
wxWindow* parent= NULL);
例
Example例 4.10 要求用户输入密码
例4.10. wxGetPasswordFromUser的使用
wxString pwd = wxGetPasswordFromUser("Please, enter your password");
wxMessageDialog 可以用来显示一行或多行信息,可以包含OK、Yes、No或者Cancel按钮。 Constructor构造函数
wxMessageDialog(wxWindow* parent,
const wxString& message,
const wxString& caption= "Message box",
long style= wxOK | wxCANCEL | wxCENTRE,
const wxPoint& pos= wxDefaultPosition);
表4.3. wxMessageDialog的风格。 styles
Methods方法
public int ShowModal();
显示对话框,当用户按下OK时返回wxID_OK。其它情况返回wxID_CANCEL。例
Example 3.4 显示 wxMessageDialog 询问用户是否真的退出程序。
wxMessageBox 显示一个信息框。返回值为 wxYES, wxNO, wxCANCEL, wxOK中的一个 。
wxMessageBox(const wxString& message,
const wxString& caption= "Message box",
int style= wxOK | wxCENTRE,
wxWindow* parent,
int x= -1,
int y= -1);
Note注意
在windows上本地的MessageBox函数是不使用wxCENTRE风格的。而在通用函数中是使用的。这是因为本地函数不能将文本居中。当通用函数使用时不显示符号。
Constructor构造函数
wxSingleChoiceDialog(wxWindow* parent,
const wxString& message,
const wxString& caption,
int n,
const wxString* choices,
char ** clientData= (char**) NULL,
long style= wxCHOICEDLG_STYLE,
const wxPoint& pos= wxDefaultPosition);
表4.4. wxSingleChoiceDialog 风格
Methods方法
public void SetSelection(int sel);
设置已选项
public int GetSelection();
返回已选项的索。
public wxString GetStringSelection();
返回已选项。
public int ShowModal();
显示对话框,当用户按下OK时返回wxID_OK。其它情况返回wxID_CANCEL。例
例子中显示一个对话框让用户选择自己所在的国家。
例4.11. wxSingleChoiceDialog的使用。
wxString countries[] = { "Belgium", "United Kingdom", "U.S.A.", "France" };
wxSingleChoiceDialog *dlg = new wxSingleChoiceDialog(NULL, "Where do you live?",
"Select a country",
4, countries);
if ( dlg->ShowModal() == wxID_OK )
{
wxMessageBox("You live in " + dlg->GetStringSelection());
}
dlg->Destroy();
wxGetSingleChoice 显示 wxSingleChoiceDialog并返回选择的字符串。
wxString wxGetSingleChoice(const wxString& message,
const wxString& caption,
const wxArrayString& choices,
wxWindow * parent= (wxWindow *) NULL,
int x= -1,
int y= -1,
bool centre= TRUE,
int width= wxCHOICE_WIDTH,
int height= wxCHOICE_HEIGHT);
wxString wxGetSingleChoice(const wxString& message,
const wxString& caption,
int n,
const wxString * choices,
wxWindow * parent= (wxWindow *) NULL,
int x= -1,
int y= -1,
bool centre= TRUE,
int width= wxCHOICE_WIDTH,
int height= wxCHOICE_HEIGHT);
wxGetSingleChoiceIndex
wxGetSingleChoiceIndex 显示 wxSingleChoiceDialog 并返回选择的索引。当没有任何选项被选择时返回-1。
int wxGetSingleChoiceIndex(const wxString& message,
const wxString& caption,
const wxArrayString& choices,
wxWindow * parent= (wxWindow *) NULL,
int x= -1,
int y= -1,
bool centre= TRUE,
int width= wxCHOICE_WIDTH,
int height= wxCHOICE_HEIGHT);
int wxGetSingleChoiceIndex(const wxString& message,
const wxString& caption,
int n,
const wxString * choices,
wxWindow * parent= (wxWindow *) NULL,
int x= -1,
int y= -1,
bool centre= TRUE,
int width= wxCHOICE_WIDTH,
int height= wxCHOICE_HEIGHT);
wxGetSingleChoiceData
wxGetSingleChoiceData 显示wxSingleChoiceDialog 并返回与所选项关联的数据。
void* wxGetSingleChoiceData(const wxString& message,
const wxString& caption,
const wxArrayString& choices,
void ** client_data,
wxWindow * parent= (wxWindow *) NULL,
int x= -1,
int y= -1,
bool centre= TRUE,
int width= wxCHOICE_WIDTH,
int height= wxCHOICE_HEIGHT);
void* wxGetSingleChoiceData(const wxString& message,
const wxString& caption,
int n,
const wxString * choices,
void ** client_data,
wxWindow * parent= (wxWindow *) NULL,
int x= -1,
int y= -1,
bool centre= TRUE,
int width= wxCHOICE_WIDTH,
int height= wxCHOICE_HEIGHT);
注意
wxCHOICE_WIDTH 的定义是 200, wxCHOICE_HEIGHT 的定义是150.