wx功能区按钮栏:在运行时更改按钮的图像



我正在寻找一种更好的方法来在运行时更改wxRibbonButtonBar上按钮的图像。在MS Excel中,当一个或多个单元格的背景发生更改时,功能区按钮会反映上次选择的颜色。因此,我的目标是实现类似的目标。我想到了两种可能的方法:

第一种方法:有两个功能:

1) AddButton(int button_id,..,const wx位图和位图,…)

2) DeleteButton(int button_id)

由于按钮的ID是已知的,所以每当需要更改位图时,我都会考虑调用DeleteButton,然后调用AddButton。虽然这会奏效,但我怀疑这是一个好方法。

另一种可能的方法:由于AddButton函数返回指向wxRibbonButtonBarButtonBase的指针,并且存在以下函数

void SetItemClientData (wxRibbonButtonBarButtonBase *item, void *data)

返回值wxRibbonButtonBarButtonBase可以作为指向特定按钮的参数传递给它。然而,在这里,我不确定参数data到底指的是什么(因为按钮可以有标题、位图等),以及我如何将wxBitmap作为data传递给该函数。

以下代码是第一种和第二种方法的混合,更像是第一种方法;然而,我怀疑这是最佳方式。

wxColourDialog dlg(this);
wxColour color;
if (dlg.ShowModal() == wxID_OK) color = dlg.GetColourData().GetColour(); else return;
wxMemoryDC dc;
wxBitmap bmp(bucket_xpm); //32 by 32
dc.SelectObject(bmp);
dc.SetBrush(color);
dc.DrawRectangle(0, 28, 32, 32);
int itemID=m_ribbonButtonBarFormat->GetItemId(m_BtnFillColor);
m_ribbonButtonBarFormat->DeleteButton(itemID);
m_BtnFillColor=m_ribbonButtonBarFormat->AddButton(itemID, wxT("Fill Color"), bmp, wxEmptyString);
m_ribbonButtonBarFormat->Realize();

任何想法都将受到赞赏,如果这有利于第二种方法,代码片段将非常有帮助。

我的目标是">我一直在寻找一种更好的方法来在运行时更改wxRibbonButtonBar上按钮的图像。在MS Excel中,当一个或多个单元格的背景发生变化时,功能区按钮会反映上次选择的颜色。">

我的方法的缺点是我的目标是更改wxRibbonButtonBar的位图。事实上,Excel通过混合按钮工具实现了这一点,当点击下拉工具时,它会显示调色板,然后一旦你点击按钮,它就会应用所选的颜色(不过我仍然不知道如何显示浮动调色板)。

因此,我将方法从wxRibbonButtonBar更改为wxRibbonToolBar,并添加了一个混合按钮,代码如下:

m_ribbonToolBarFormat->AddHybridTool(ID_FORMATFILLCOLOR, bmp, wxT("Fill Color"));

混合工具可以生成两个事件:1)OnRibbonToolClicked2)nRibonToolDropdownClicated

OnRibbonToolDropdownFillColorClicked(wxRibbonToolBarEvent& event)
{
wxColourDialog dlg(this);
if (dlg.ShowModal() == wxID_OK) m_LastChosenFillColor = dlg.GetColourData().GetColour(); else return;
wxMemoryDC dc;
wxBitmap bmp(bucket_xpm);
dc.SelectObject(bmp);
dc.SetBrush(m_LastChosenFillColor);
dc.DrawRectangle(0, 28, 32, 32);
m_ribbonToolBarFormat->SetToolNormalBitmap(ID_FORMATFILLCOLOR, bmp);
m_ribbonToolBarFormat->Refresh();

使用SetToolNormalBitmap,我可以在不删除工具的情况下在运行时设置工具的图像。

最新更新