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