8.3 选择和选项对话框
在这一小节中,我们来看看那些让你作出选择或者允许你给出选项的对话框,包括:wxColourDialog, wxFontDialog, wxSingleChoiceDialog 和 wxMultiChoiceDialog。
wxColourDialog
这个对话框允许用户从标准颜色或者是一个颜色范围中选择一种颜色。
在 windows 系统上,颜色选择对话框使用的是 windows 系统提供的原生控件,这个对话框主要包含三个区域,左上角是一个由 48 中常用颜色组成的区域,左下角是一个拥有 16 个选项的定制颜色区,用户的应用程序可以自行设置这 16 种定制的颜色,右边则可以展开用来精确的选择一个颜色.下图演示了这个对话框完全展开以后的样子:
通用的颜色选择对话框如下图所示,可以在 GTK+ 1 或者 X11 系统上使用.它包含 48 个常用颜色和 16 个可定制颜色,右边包含三个滑条用来选择 RGB 三原色的值.选好的值用来替换当前选中的定制颜色或者 (如果当前没有选中任何定制颜色的话) 第一个定制颜色.和 windows 系统原生的颜色选择框不同,右边的滑条区域是不可以隐藏的.在 Windows 平台和其它平台上,你也可以通过 wxGenericColourDialog 类来使用这个通用颜色选择对话框。
下图演示了 GTK+的原生颜色选择对话框:
Mac OsX 平台上的颜色选择对话框如下图所示:
要使用颜色选择对话框,你可以创建一个 wxColourDialog 局部变量,传递的参数包括父窗口指针和一个 wxColourData 指针,后者用来设置一些默认数据,然后调用 ShowModal 函数,当这个函数返回时,通过 GetColourData 函数获取用户对 wxColourData 所做的更改。
wxColourData 的成员函数
SetChooseFull 定义在 windows 平台上,颜色选择对话框应该是完全展开的方式显示.否则将只显示左边的部分.GetChooseFull 函数则用来获取 Bool 格式的这个选项的值。
SetColour 用来设置默认的颜色, GetColour 函数用来返回用户当前选择的颜色。
SetCustomColour 使用一个 0 到 15 之间的索引和一个 wxColour 类型的颜色值来设置颜色选择对话框的定制颜色.使用 GetCustomColour 函数返回当前的可定制范围的颜色值,这个值可能在用户操作颜色对话框的过程中被改变。
wxColourDialog 使用举例
下面是一个使用 wxColourDialog 的例子,它将首先设置 wxColourData 的各种参数,包括 16 个灰阶色彩的定制颜色.如果用户没有取消这个对话框,就用用户选择的颜色来设置当前的背景色。
#include "wx/colordlg.h"
wxColourData data;
data.SetChooseFull(true);
for (int i = 0; i < 16; i++)
{
wxColour color(i*16, i*16, i*16);
data.SetCustomColour(i, color);
}
wxColourDialog dialog(this, &data);
if (dialog.ShowModal() == wxID_OK)
{
wxColourData retData = dialog.GetColourData();
wxColour col = retData.GetColour();
myWindow->SetBackgroundColour(col);
myWindow->Refresh();
}
wxFontDialog
wxFontDialog 可以让用户来选择一个字体(在某些平台上,还可以选择字体的颜色)。
在 Windows 平台上,使用的是 windows 系统提供的原生控件,这个控件给用户的选择包括字体的名称,点大小,类型,粗细,下划线,中划线等属性以及字体的前景颜色.一个白色区域还显示了当前选择字体的样子.注意在 windows 的字体转换到 wxWidgets 的字体过程中,中划线属性将被忽略,字体名称则被相应的字体家族名称取代. 而在 GTK+平台上,使用的是 GTK+的标准字体对话框,这个对话框不允许选择字体前景颜色。
下图演示了 windows 平台上字体选择对话框的样子:
下图演示了 GTK+上的标准字体选择对话框的样子:
除了上述两个平台以外,其它平台字体选择对话框的样子都很相似,允许用户选择的项目包括字体家族名称,大小,类型,粗细,下划线以及前景颜色等,还包括一个示例区用来显示当前字体的样子.这种字体选择框在各种平台都是可以使用的,类的名字为 wxGenericFontDialog. 下图演示了 Mac 平台上的这种字体选择对话框的样子:
要使用字体选择对话框,需要传递的参数包括父窗口和一个 wxFontData 对象,然后调用其 ShowModal 函数并且测试其返回值是否为 wxID_OK,然后从对话框中获取 wxFontData 数据,然后视需要调用其 GetChosenFont 和 GetChosenColour 函数。
wxFontData 的成员函数
EnableEffects 函数允许 windows 平台上的字体选择对话框或者通用版本的字体选择对话框显示颜色和下划线属性控制.在 GTK 版本上则没有任何效果.GetEnableEffects 函数则用来判断当前是否设置了这个标志. 不过即使禁止了这个标志,字体颜色选项还是会被保留。
SetAllowSymbols 允许选择符号字体(仅适用于 Windows), GetAllowSymbols 则返回这个选项的当前设置值。
SetColour 设置默认字体颜色, GetColour 则返回当前用户选择的颜色。
SetInitialFont 返回对话框被创建时候的默认字体. GetChosenFont 则返回用户选择的字体(wxFont)。
SetShowHelp 用来指示应该在字体对话框上显示帮助按钮(仅适用于 Windows). GetShowHelp 则返回这个选项的当前设置。
SetRange 设置用户可以选择的字体大小的范围,默认值(0, 0) 表示任何大小的字体都可以被选择.仅适用于 windows。
字体选择使用举例
在下面的例子中,应用程序使用字体选择对话框返回的字体在窗口上绘画。
#include "wx/fontdlg.h"
wxFontData data;
data.SetInitialFont(m_font);
data.SetColour(m_textColor);
wxFontDialog dialog(this, &data);
if (dialog.ShowModal() == wxID_OK)
{
wxFontData retData = dialog.GetFontData();
m_font = retData.GetChosenFont();
m_textColor = retData.GetColour();
// 更新当前窗口以便使用当前选择的字体和颜色进行重绘
myWindow->Refresh();
}
wxSingleChoiceDialog
wxSingleChoiceDialog 给用户提供了一组字符串以便用户可以选择其中的一个.它的外观如下图所示:
传递给构造函数的参数包括其父窗口指针,一个消息文本,对话框的标题文本以及一个 wxArrayString 类型的字符串选项列表.其中最后一个参数可以使用一个大小和一个 C 类型的字符串指针的指针(wxChar**) 代替。
SetSelection 用来在对话框显示之前设置一个默认的选项,使用 GetSelection(返回当前选项的索引) 或者 GetStringSelection(返回对应的字符串) 来在对话框关闭以后获取用户的选择。
你还可以在这种对话框的构造函数中传递一组 char*类型的客户区数据,在对话框被关闭以后,使用 GetSelectionClientData 函数获得和用户选项对应的客户区数据。
wxSingleChoiceDialog 使用举例
#include "wx/choicdlg.h"
const wxArrayString choices;
choices.Add(wxT("One"));
choices.Add(wxT("Two"));
choices.Add(wxT("Three"));
choices.Add(wxT("Four"));
choices.Add(wxT("Five"));
wxSingleChoiceDialog dialog(this,
wxT("This is a small sample\nA single-choice convenience dialog"),
wxT("Please select a value"),
choices);
dialog.SetSelection(2);
if (dialog.ShowModal() == wxID_OK)
wxMessageBox(dialog.GetStringSelection(), wxT("Got string"));
wxMultiChoiceDialog
wxMultiChoiceDialog 和 wxSingleChoiceDialog 很相似,不过它允许用户进行多项选择.这种对话框的外观如下图所示:
传递给这种对话框的构造函数的参数包括一个父窗口指针,一个消息文本,对话框标题文本和一个 wxArrayString 类型的选项列表. 和 wxSingleChoiceDialog 一样,最后一个参数可以使用字符串指针的列表 wxChar**和数量代替.和 wxSingleChoiceDialog 不同的是,不可以在构造函数中提供客户区数据。
使用函数 SetSelections 还设置默认选中的选项,其参数为 wxArrayInt 类型,代表一个整数数组.使用 GetSelections 来获取用户的选择,返回值也为 wxArrayInt 类型。
wxMultiChoiceDialog 使用举例
#include "wx/choicdlg.h"
const wxArrayString choices;
choices.Add(wxT("One"));
choices.Add(wxT("Two"));
choices.Add(wxT("Three"));
choices.Add(wxT("Four"));
choices.Add(wxT("Five"));
wxMultiChoiceDialog dialog(this,
wxT("A multi-choice convenience dialog"),
wxT("Please select several values"),
choices);
if (dialog.ShowModal() == wxID_OK)
{
wxArrayInt selections = dialog.GetSelections();
wxString msg;
msg.Printf(wxT("You selected %u items:\n"),
selections.GetCount());
for ( size_t n = 0; n < selections.GetCount(); n++ )
{
msg += wxString::Format(wxT("\t%d: %d (%s)\n"),
n, selections[n],
choices[selections[n]].c_str());
}
wxMessageBox(msg, wxT("Got selections"));
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论