C++ 基于切换事件更改wxToolBarToolBase的图标
我在C++ 基于切换事件更改wxToolBarToolBase的图标,c++,wxwidgets,C++,Wxwidgets,我在wxToolBar中有一个切换按钮 我希望该按钮根据其状态显示两个不同的图标(一个是“按下”时的图标,另一个是“释放”时的图标) 我试过这个: // toolbar setup: muteBtn = toolBar -> AddCheckTool( ID_MUTE_BTN, wxT( "Mute" ), wxBitmap( wxT( "unmute.png" ), wxBITMAP_TYPE_PNG ), wxBitmap( wxT(
wxToolBar
中有一个切换按钮
我希望该按钮根据其状态显示两个不同的图标(一个是“按下”时的图标,另一个是“释放”时的图标)
我试过这个:
// toolbar setup:
muteBtn = toolBar -> AddCheckTool(
ID_MUTE_BTN,
wxT( "Mute" ),
wxBitmap( wxT( "unmute.png" ), wxBITMAP_TYPE_PNG ),
wxBitmap( wxT( "unmute.png" ), wxBITMAP_TYPE_PNG ),
wxT( "Enable/Disable sounds" ),
wxT( "Enable/Disable sounds" )
);
...
// EVT_BUTTON handler:
void MyFrame::MuteChanged( wxCommandEvent& event )
{
if ( event.IsChecked() )
{
Mute();
muteBtn -> SetNormalBitmap( wxBitmap( wxT( "mute.png" ), wxBITMAP_TYPE_PNG ) );
}
else
{
Unmute();
muteBtn -> SetNormalBitmap( wxBitmap( wxT( "unmute.png" ), wxBITMAP_TYPE_PNG ) );
}
// also tried refresh and update without success:
// toolBar -> Refresh();
// toolBar -> Update();
}
但这种行为并不是我所期望的。而不是:
- 启动图标:unmute.png
- 第一次单击后:mute.png(
called)mute()
- 第二次单击后:unmute.png(
called)unmute()
- 第三次单击后:mute.png(
called)mute()
- 启动图标:unmute.png
- 第一次单击后:unmute.png(
called)Mute()
- 第二次单击后:mute.png(
called)Unmute()
- 第三次单击后:unmute.png(
called)Mute()
wxToolBar::Refresh()
和wxToolBar::Update()
[参见代码片段],但没有成功
如何获得正确的行为?wx的开发人员确认不应使用
wxToolBarToolBase::SetNormalBitmap()
我使用方法wxToolBar::SetToolNormalBitmap
解决了这个问题:
// EVT_BUTTON handler:
void MyFrame::MuteChanged( wxCommandEvent& event )
{
if ( event.IsChecked() )
{
Mute();
toolBar -> SetToolNormalBitmap( ID_MUTE_BTN, wxBitmap( wxT( "mute.png" ), wxBITMAP_TYPE_PNG ) );
}
else
{
Unmute();
toolBar -> SetToolNormalBitmap( ID_MUTE_BTN, wxBitmap( wxT( "unmute.png" ), wxBITMAP_TYPE_PNG ) );
}
}
我为工具栏示例制作了一个补丁,并提交了这个票证:@VZ。我想这可能是wxsidgets中的一个bug。你/某人能给我建议一种获得相同结果的替代方法吗?我的(现在删除的)评论是错误的,这是正确的方法。