Winapi MFC是否将CMFCToolBar按钮更改为切换而不是按下/释放?
我在网上找到一篇文章,上面说要将工具栏按钮设置为保持按下状态的类型,只需在按钮上设置一个styleWinapi MFC是否将CMFCToolBar按钮更改为切换而不是按下/释放?,winapi,mfc,toolbar,Winapi,Mfc,Toolbar,我在网上找到一篇文章,上面说要将工具栏按钮设置为保持按下状态的类型,只需在按钮上设置一个styleTBBS\u复选框,但它对我不起作用(它仍然像一个普通按钮)。我确认样式已经设置好,就在创建之后,SetWindowText()MFC向导设置了CMainFrame::OnCreate()。我做错了什么 for (int i=0; ; i++) { int id=m_wndToolBar.GetItemID(i); if (id==0) { break; }
TBBS\u复选框
,但它对我不起作用(它仍然像一个普通按钮)。我确认样式已经设置好,就在创建之后,SetWindowText()
MFC向导设置了CMainFrame::OnCreate()
。我做错了什么
for (int i=0; ; i++) {
int id=m_wndToolBar.GetItemID(i);
if (id==0) {
break;
}
if (id == ID_THE_ID) {
m_wndToolBar.SetButtonStyle(i, TBBS_CHECKBOX);
}
}
这里推荐使用。命令ID可用于多个UI项,例如菜单项和工具栏按钮。处理程序会影响具有相同ID的所有项,因此不需要为每个项单独设置一个处理程序。提供的方法可以使菜单或工具栏按钮等UI项除启用/禁用外,还可以用作按钮、复选框或单选按钮
在您的示例中,假设是否过滤选项是基于每个文档实例化的,即文档的所有视图都将被过滤或未过滤,所有视图都将同时进行过滤。您应该在文档类中定义一个布尔变量:
BOOL m_bFilterData = FALSE;
然后使用过滤器pic(可能还有一个菜单项)的工具栏按钮的ON_命令
和ON_UPDATE_命令
处理程序:
现在,如果过滤器选项是按视图实例化的,即每个视图都可以独立地进行过滤或非过滤,则上述内容必须转到视图类(-es):
这里推荐使用。命令ID可用于多个UI项,例如菜单项和工具栏按钮。处理程序会影响具有相同ID的所有项,因此不需要为每个项单独设置一个处理程序。提供的方法可以使菜单或工具栏按钮等UI项除启用/禁用外,还可以用作按钮、复选框或单选按钮
在您的示例中,假设是否过滤选项是基于每个文档实例化的,即文档的所有视图都将被过滤或未过滤,所有视图都将同时进行过滤。您应该在文档类中定义一个布尔变量:
BOOL m_bFilterData = FALSE;
然后使用过滤器pic(可能还有一个菜单项)的工具栏按钮的ON_命令
和ON_UPDATE_命令
处理程序:
现在,如果过滤器选项是按视图实例化的,即每个视图都可以独立地进行过滤或非过滤,则上述内容必须转到视图类(-es):
请提供一个。如果您发布该文章的链接,它可能会很有用。建议使用。ON_命令的
处理程序应切换一个布尔变量,ON_UPDATE_命令UI的处理程序应相应地更新项。请看我文章中的一些提示。这是一个很好的信息,但是当处于活动状态时保持按下,命令ui是否只提供启用/禁用,或者还可以设置状态?它将是一个过滤器按钮(上面的漏斗图片),在这里它处于活动状态或未处于活动状态。请提供一个。如果您发布该文章的链接,它可能会很有用。建议使用。ON_命令的处理程序应切换一个布尔变量,ON_UPDATE_命令UI的处理程序应相应地更新项。请看我文章中的一些提示。这是一个很好的信息,但是当处于活动状态时保持按下,命令ui是否只提供启用/禁用,或者还可以设置状态?它将是一个过滤器按钮(上面有漏斗的图片),在这里它要么是活动的,要么不是活动的。很好,现在一切都有意义了。你介意也看一眼吗?太好了,现在一切都说得通了。你介意也看一眼吗?
void CMyView::OnViewFilterData()
{
// Toggle filtered state
m_bFilterData = !m_bFilterData;
// Refresh this view only
.
.
}
void CMyView::OnUpdateViewFilterData(CCmdUI* pCmdUI)
{
// Enable/Disable as needed
pCmdUI->Enable(GetDocument()->m_nTotalItems > 0);
// Show pressed/checked if data filtered
pCmdUI->SetCheck(m_bFilterData);
}