CMFCOutlookBarTabCtrl::SetActiveTab 不工作
CMFCOutlookBarTabCtrl::SetActiveTab not working
我已将 CMFCOutlookBar 控件添加到对话框中。这个 outlookbar 包含大约 12 棵树。
如下 link https://msdn.microsoft.com/en-us/library/bb983453.aspx
我们可以根据需要设置活动选项卡(在我的例子中是树控件)。
但是好像不行。
按照上述 link 此函数 returns 成功时非零值。当我用它来设置我选择的树时,它确实返回了 1。但视觉上没有改变。
有人可以帮助我吗?
问题已解决。
CMFCOutlookBarTabCtrl::SetActiveTab() 仅在 window 显示后有效。
我猜这是因为 CMFCOutlookBar 将其先前的状态存储到注册表并在下一个 运行 时重新加载。如果我们在显示 window.
之前使用它,这将覆盖 SetActiveTab() 所做的更改
我遇到了同样的问题,你是对的,在加载时选项卡被设置为最后一个会话值 - 实际上它似乎在加载过程中被设置了几次 - 其中一些似乎每次都对应添加了一个tab,然后最后一次调用好像是上次session的tab
解决方案是在 window 准备好显示后设置值。这可以通过覆盖包含选项卡栏的视图上的 OnShowWindow
回调来完成。
在我的例子中,标签栏被添加到一个名为 MainFrame
的视图中,它有一个成员变量 CMFCOutlookBarTabCtrl* m_pOutlookBar;
,它在 OnCreate
回调中被初始化。
然后我可以通过覆盖 OnShowWindow
以包含以下内容来正确设置选项卡:
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.
}
}
}
}
我已将 CMFCOutlookBar 控件添加到对话框中。这个 outlookbar 包含大约 12 棵树。
如下 link https://msdn.microsoft.com/en-us/library/bb983453.aspx 我们可以根据需要设置活动选项卡(在我的例子中是树控件)。
但是好像不行。
按照上述 link 此函数 returns 成功时非零值。当我用它来设置我选择的树时,它确实返回了 1。但视觉上没有改变。
有人可以帮助我吗?
问题已解决。 CMFCOutlookBarTabCtrl::SetActiveTab() 仅在 window 显示后有效。 我猜这是因为 CMFCOutlookBar 将其先前的状态存储到注册表并在下一个 运行 时重新加载。如果我们在显示 window.
之前使用它,这将覆盖 SetActiveTab() 所做的更改我遇到了同样的问题,你是对的,在加载时选项卡被设置为最后一个会话值 - 实际上它似乎在加载过程中被设置了几次 - 其中一些似乎每次都对应添加了一个tab,然后最后一次调用好像是上次session的tab
解决方案是在 window 准备好显示后设置值。这可以通过覆盖包含选项卡栏的视图上的 OnShowWindow
回调来完成。
在我的例子中,标签栏被添加到一个名为 MainFrame
的视图中,它有一个成员变量 CMFCOutlookBarTabCtrl* m_pOutlookBar;
,它在 OnCreate
回调中被初始化。
然后我可以通过覆盖 OnShowWindow
以包含以下内容来正确设置选项卡:
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.
}
}
}
}