Winapi MFC是否将CMFCToolBar按钮更改为切换而不是按下/释放?

Winapi 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; }

我在网上找到一篇文章,上面说要将工具栏按钮设置为保持按下状态的类型,只需在按钮上设置一个style
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);
}