У меня была такая же проблема, и вы правы, что при загрузке вкладка получает значение последнего сеанса связи - на самом деле она кажется несколько заданной в процессе загрузки - некоторые из них, похоже, соответствуют каждому времени добавлена вкладка, а затем последний раз, когда она вызывается, кажется, является вкладкой предыдущего сеанса.
Решение состоит в том, чтобы установить значение, как только окно будет готово к показу. Это можно сделать путем переопределения обратного вызова 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.
}
}
}
}