MFC:根据请求将CListView选项卡添加到CTabView(CBCGPTabView)不会';t调用CMyListView::OnInitialUpdate()

MFC:根据请求将CListView选项卡添加到CTabView(CBCGPTabView)不会';t调用CMyListView::OnInitialUpdate(),mfc,clistview,ctabctrl,Mfc,Clistview,Ctabctrl,我有一个CMyTabView源于CBCGPTabView(CTabView),我想动态添加选项卡。正在添加的选项卡将是从CListView派生的CMyListView。如果我在CMyTabView::OnCreate()期间添加选项卡,它就可以正常工作。如果我尝试通过自定义消息执行此操作,它会添加选项卡,但它是空的(CMyListView::OnInitialUpdate()从未调用) 我需要做什么才能让它工作 以下是有效的方法(测试选项卡): 这不会(除了添加带有空白窗口的选项卡) afx_m

我有一个
CMyTabView
源于
CBCGPTabView
CTabView
),我想动态添加选项卡。正在添加的选项卡将是从
CListView
派生的
CMyListView
。如果我在
CMyTabView::OnCreate()期间添加选项卡,它就可以正常工作。如果我尝试通过自定义消息执行此操作,它会添加选项卡,但它是空的(
CMyListView::OnInitialUpdate()
从未调用)

我需要做什么才能让它工作

以下是有效的方法(测试选项卡):

这不会(除了添加带有空白窗口的选项卡)

afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM WPARAM,LPARAM LPARAM)
{
CString mytabname;
mytabname=_T(“我的列表视图”);
//检查选项卡是否已存在-如果已存在,请选择它
CBCGPTabWnd&tabcontrol=GetTabControl();

对于(inti=0;i,您必须自己调用它,下面的版本有效:

afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM wparam, LPARAM lparam)
{
  CString mytabname;
  mytabname=_T("My ListView");
  
  // check if tab already exists - if so select it
  CBCGPTabWnd &tabcontrol=GetTabControl();
  for (int i=0; i<tabcontrol.GetTabsNum(); i++) {
    CString tablabel;
    if (tabcontrol.GetTabLabel(i, tablabel)) {
      if (tablabel==mytabname) {
        tabcontrol.SetActiveTab(i);
        return 0;
      }
    }
  }
  // new tab so add it
  int index=AddView(RUNTIME_CLASS(CMyListView), mytabname);
  if (index!=-1) {
    CView* thetabview=GetView(index);
    if (thetabview) {
      // we need to call OnInitUpdate ourself
      thetabview->SendMessage(WM_INITIALUPDATE);
      //make sure any child windows of the view get the message too
      thetabview->SendMessageToDescendants(WM_INITIALUPDATE, 0, 0, TRUE, TRUE);
    }

    tabcontrol.SetActiveTab(index);
  }
  
  return 0;
}
afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM WPARAM,LPARAM LPARAM)
{
CString mytabname;
mytabname=_T(“我的列表视图”);
//检查选项卡是否已存在-如果已存在,请选择它
CBCGPTabWnd&tabcontrol=GetTabControl();
对于(int i=0;iSendMessage(WM_INITIALUPDATE);
//确保该视图的所有子窗口也获得该消息
选项卡视图->发送消息到Descendats(WM_INITIALUPDATE,0,0,TRUE,TRUE);
}
tabcontrol.SetActiveTab(索引);
}
返回0;
}
afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM wparam, LPARAM lparam)
{
  CString mytabname;
  mytabname=_T("My ListView");
  
  // check if tab already exists - if so select it
  CBCGPTabWnd &tabcontrol=GetTabControl();
  for (int i=0; i<tabcontrol.GetTabsNum(); i++) {
    CString tablabel;
    if (tabcontrol.GetTabLabel(i, tablabel)) {
      if (tablabel==mytabname) {
        tabcontrol.SetActiveTab(i);
        return 0;
      }
    }
  }
  // new tab so add it
  int index=AddView(RUNTIME_CLASS(CMyListView), mytabname);
  if (index!=-1) {
    tabcontrol.SetActiveTab(index);
  }
  
  return 0;
}
afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM wparam, LPARAM lparam)
{
  CString mytabname;
  mytabname=_T("My ListView");
  
  // check if tab already exists - if so select it
  CBCGPTabWnd &tabcontrol=GetTabControl();
  for (int i=0; i<tabcontrol.GetTabsNum(); i++) {
    CString tablabel;
    if (tabcontrol.GetTabLabel(i, tablabel)) {
      if (tablabel==mytabname) {
        tabcontrol.SetActiveTab(i);
        return 0;
      }
    }
  }
  // new tab so add it
  int index=AddView(RUNTIME_CLASS(CMyListView), mytabname);
  if (index!=-1) {
    CView* thetabview=GetView(index);
    if (thetabview) {
      // we need to call OnInitUpdate ourself
      thetabview->SendMessage(WM_INITIALUPDATE);
      //make sure any child windows of the view get the message too
      thetabview->SendMessageToDescendants(WM_INITIALUPDATE, 0, 0, TRUE, TRUE);
    }

    tabcontrol.SetActiveTab(index);
  }
  
  return 0;
}