CMFCootLookBartABCtrl::SetActiveTab不工作

CMFCootLookBartABCtrl::SetActiveTab不工作,mfc,Mfc,我已将CMFCOutlookBar控件添加到对话框中。这个了望台大约有12棵树 根据以下链接 我们可以设置愿望的活动选项卡(在我的案例树控件中) 但它似乎不起作用 根据上面的链接,此函数在成功时返回非零值。事实上,当我用它来设置我选择的树时,它返回1。但从视觉上看,它并没有改变 有人能帮我吗?问题解决了。 CMFCootLookBartABCtrl::SetActiveTab()仅在显示窗口后工作。 我猜这是因为CMFCootLookBar将其上一个状态存储到Registry,并在下次运行时重新

我已将CMFCOutlookBar控件添加到对话框中。这个了望台大约有12棵树

根据以下链接 我们可以设置愿望的活动选项卡(在我的案例树控件中)

但它似乎不起作用

根据上面的链接,此函数在成功时返回非零值。事实上,当我用它来设置我选择的树时,它返回1。但从视觉上看,它并没有改变

有人能帮我吗?

问题解决了。 CMFCootLookBartABCtrl::SetActiveTab()仅在显示窗口后工作。
我猜这是因为CMFCootLookBar将其上一个状态存储到Registry,并在下次运行时重新加载。如果我们在显示窗口之前使用SetActiveTab(),这会覆盖SetActiveTab()所做的更改。

我也有同样的问题,您是对的,加载时选项卡会被设置为最后一个会话值-实际上,在加载过程中它似乎被设置了好几次-其中一些似乎与每次添加选项卡时对应,最后一次调用它似乎是上一次会话中的选项卡

解决方案是在窗口准备好显示后设置该值。这可以通过覆盖包含选项卡栏的视图上的
OnShowWindow
回调来实现

在我的例子中,选项卡栏被添加到名为
大型机
的视图中,该视图有一个成员变量
CMFCOutlookBarTabCtrl*m_pOutlookBar
OnCreate
回调中初始化

然后,我可以通过覆盖ShowWindow上的
来正确设置选项卡,以包含以下内容:

void MainFrame::OnShowWindow(BOOL bShow, UINT nStatus)
{
    CFrameWndEx::OnShowWindow(bShow, nStatus);

    if ((m_pOutlookBar != NULL) && bShow) {
        //When the tab bar is shown, select the correctview
        for (int tabIdx = 0; tabIdx < m_pOutlookBar->GetTabsNum(); tabIdx++) {
            CString requiredLabel;
            CString thisLabel;
            requiredLabel.LoadString(IDS_OF_TAB); //The ID of the tab wanted
            m_pOutlookBar->GetTabLabel(tabIdx,thisLabel);
            if (requiredLabel.Compare(thisLabel) == 0) {
                //If the tab label matches the one required
                m_pOutlookBar->SetActiveTab(tabIdx); //set it as the active one.
                break; //done.
            }
        }
    }
}
void MainFrame::OnShowWindow(BOOL-bShow,UINT-nStatus)
{
CFrameWndEx::OnShowWindow(bShow,nStatus);
if((m_pOutlookBar!=NULL)&&b显示){
//显示选项卡栏时,选择正确的视图
对于(int-tabIdx=0;tabIdxGetTabsNum();tabIdx++){
CString所需标签;
点击此标签;
requiredLabel.LoadString(ID_OF_TAB);//所需选项卡的ID
m_pOutlookBar->GetTabLabel(tabIdx,thisLabel);
如果(requiredLabel.Compare(thisLabel)==0){
//如果选项卡标签与所需标签匹配
m_pOutlookBar->SetActiveTab(tabIdx);//将其设置为活动选项卡。
break;//完成。
}
}
}
}